向viewpager添加新页面似乎为空白

时间:2014-05-24 07:30:58

标签: android android-layout android-fragments android-viewpager

我遇到了查看分页器的问题。视图分页器最初工作正常,适配器调用getItem(int pos)方法,页面得到正确设置。 现在当我尝试替换视图寻呼机中的页面时出现问题。页面碎片被替换但显示空白屏幕。 我不知道下一步该做什么。

尝试调用`notifyDatasetChanged()但仍无效果。

继承代码`

public class BaseActivity extends FragmentActivity {
    private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    private CharSequence mDrawerTitle;
    private CharSequence mTitle;
    private String[] mActions;

    private static final int NUM_PAGES = 2;

    private ViewPager mPager;

    private PagerAdapter mPagerAdapter;
    private FragmentManager fragmentManager;
    private FragmentTransaction fragmentTransaction;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.common_layout);
        // Instantiate a ViewPager and a PagerAdapter.
        fragmentManager = getSupportFragmentManager();
        mPager = (ViewPager) findViewById(R.id.pager);
        mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
        mPager.setAdapter(mPagerAdapter);

        mTitle = mDrawerTitle = getTitle();
        mActions = getResources().getStringArray(R.array.actions);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.left_drawer);

        // opens
        mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
                GravityCompat.START);
        // set up the drawer's list view with items and pclick listener
        mDrawerList.setAdapter(new ArrayAdapter<String>(this,
                R.layout.drawer_list_item, mActions));
        mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

    }

    // The click listener for ListView in the navigation drawer
    private class DrawerItemClickListener implements
            ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            selectItem(position);
        }
    }

    private void selectItem(int position) {
        switch (position) {
        case 0:
            replaceFragment(new DashFragment());
            break;
        case 1:
            replaceFragment(new SearchFragment());
            break;
        case 2:
            replaceFragment(new UploadFragment());
            break;
        default:
            replaceFragment(new DashFragment());
            break;
        }
        mDrawerList.setItemChecked(position, true);
        setTitle(mActions[position]);
        Toast.makeText(this, "Title is=" + getTitle(), 1).show();
        mDrawerLayout.closeDrawer(mDrawerList);

    }

    private void replaceFragment(Fragment newContentFragment) {
        // TODO Auto-generated method stub
        FragmentTransaction fragmentTransaction = fragmentManager
                .beginTransaction();
        fragmentTransaction.replace(R.id.pager, newContentFragment);
        fragmentTransaction.addToBackStack(String.valueOf(newContentFragment
                .getId()));
        fragmentTransaction.commit();
    }

    @Override
    public void onBackPressed() {
        if (mPager.getCurrentItem() == 0) {
            // If the user is currently looking at the first step, allow the
            // system to handle the
            // Back button. This calls finish() on this activity and pops the
            // back stack.
            super.onBackPressed();
        } else {
            // Otherwise, select the previous step.
            mPager.setCurrentItem(mPager.getCurrentItem() - 1);
        }
    }

    private class ScreenSlidePagerAdapter extends FragmentPagerAdapter {
        public ScreenSlidePagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            switch (position) {
            case 0:
                return new DashFragment();
            case 1:
                return new SearchFragment();
            default:
                return new DashFragment();
            }
        }

        @Override
        public int getCount() {
            return NUM_PAGES;
        }


    }


}

这是我的common_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </FrameLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:focusable="true"
        android:focusableInTouchMode="true" />

    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        android:background="#111"
        android:choiceMode="singleChoice" />

</android.support.v4.widget.DrawerLayout>

1 个答案:

答案 0 :(得分:1)

以下是您问题的解决方案。这些也有很好的解释。

first

second

保持干燥:)

如果您需要进一步解释,请告诉我。