使用ViewPager刷新tableLayout(带片段)

时间:2015-07-01 09:12:02

标签: android android-fragments android-viewpager android-tablelayout

我有一点问题

现状
我有一个里面有2个碎片的ViewPager。

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    if (viewPager != null) {
        setupViewPager(viewPager);
    }

//////////////////////

    private void setupViewPager(ViewPager viewPager) {
    adapter = new PagerAdapter (getSupportFragmentManager());
    adapter.addFragment(new Frag1(), "Frag1");
    adapter.addFragment(new Frag2(), "Frag2");
    viewPager.setAdapter(adapter);

}

我把它放在我的TabLayout

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);

它工作得非常好,但现在我想在导航抽屉里按一个按钮时更改标签内的碎片。

此处:

     private void setupDrawerContent(final NavigationView navigationView) {
    navigationView.setNavigationItemSelectedListener(
            new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            mDrawerLayout.closeDrawers();
            menuItem.setChecked(true);
            switch (menuItem.getItemId()) {
                case R.id.nav_menu1:
                    break;
                case R.id.nav_menu2:

                    here for example

                    break;
                case R.id.nav_menu3:
                    break;
            }

            return true;
        }

    });
}

我该怎么做? PS:我尝试为适配器添加一些notifyDataSetChanged() .. invalidate() tabLayout ...我删除了代码,因为我做错了。

这是我的PagerAdapter

    static class PagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragments = new ArrayList<>();
    private final List<String> mFragmentTitles = new ArrayList<>();

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

    public void addFragment(Fragment fragment, String title) {
        mFragments.add(fragment);
        mFragmentTitles.add(title);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragments.get(position);
    }

    @Override
    public int getCount() {
        return mFragments.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitles.get(position);
    }
}

1 个答案:

答案 0 :(得分:0)

使用FragmentStatePagerAdapter而不是FragmentPagerAdapter解决。