在Drawer中选择选项后替换ViewPager中的片段

时间:2016-02-26 09:04:31

标签: android android-fragments navigation-drawer

与ViewPager一样,我有很多应用程序使用MainActivity。 当我在NavigationDrawer中选择选项时,我想在ViewPager中更改一个片段。所以为了实现这一点,我创造了这样的东西:

选项单击侦听器:

    @Override
    public void onItemClick(View view, int pos) {
        mainActivity.changeFragment(pos);
    }

MainActivity方法:

public void changeFragment(final int key) {
        mDrawerLayout.closeDrawers();
        new Handler(Looper.getMainLooper()).post(new Runnable(){
            @Override
            public void run() {
                mainPagerAdapter.setKey(key);
            }
        });
    }

和MainPagerAdapter:

public class MainPagerAdapter extends FragmentStatePagerAdapter {

    public final static int NUM_OF_PAGES = 2;

    private int mCurrentFragmentKey = 0;

    public MainPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        if (position == HOME) {
            if (mCurrentFragmentKey == 0) 
                return new Fragment1();
            else
                return new Fragment2();
        } else
            return new SecondViewPagerFragment();
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }

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

    public void setKey(int key) {
        mCurrentFragmentKey = key;
        notifyDataSetChanged();
    }

问题:

不幸的是,它无法正常工作,因为当我选择整个视图口吃表现不佳时。我该如何解决这个问题?

修改

我更改了通知寻呼机,数据集已更改为:

new Handler().postDelayed(new Runnable(){
                @Override
                public void run() {
                    mainPagerAdapter.setKey(key);
                }
            }, 500);

现在一切正常,但我不确定这是最好的解决方案。有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:0)

如果你有各种扩展FragmentStatePagerAdapter的适配器,当你需要更改viewpager中的内容时,你可以简单地调用REGISTRATION_EMAIL_HTML = False

如果setAdapter提供要显示的视图,更改适配器可能会使viewpager的内容发生变化。