2

我的 android 应用程序中有一个 TabLayout 和 ViewPager。但是,当我使用滑动将“Tab1”更改为“Tab2”并使用单击“Tab1”返回第一个选项卡时,我的 viewpager 中的片段不会更新。

如果我使用滑动从“Tab2”移动到“Tab3”,然后尝试单击选项卡以移回 Tab2,则存在类似问题。

否则 TabLayout 工作正常,如果我使用任何其他滑动或单击组合,所有选项卡都将被更新并显示正确的片段。

        //set tabs and viewpager
    ViewPager viewPager = (ViewPager) findViewById(R.id.mViewPager);
    viewPager.setAdapter(new MyFragmentPageAdapter(getSupportFragmentManager(), MainActivity.this));

    //layout
    TabLayout tabLayout= (TabLayout) findViewById(R.id.mTabs);
    tabLayout.setupWithViewPager(viewPager);
4

3 回答 3

2

您应该实施setOnTabSelectedListener

tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
           viewPager.setCurrentItem(tab.getPosition());
        }
});
于 2015-08-31T07:20:58.917 回答
2

很晚了,但我想出了使用 FragmentPagerAdapter 的最佳方法

首先在 viewpager create 方法中使用的所有片段如下。

公共无效更新视图(){
  //更新您要更新的任何视图或数据
}

还覆盖在 FragmentPagerAdapter 中使用的方法 setUserVisibleHint 来通知片段是否对用户可见。

@Override
    公共无效 setUserVisibleHint(boolean isVisibleToUser) {
        this.isVisibleToUser = isVisibleToUser;
        super.setUserVisibleHint(isVisibleToUser);
    }

最后在您的片段中添加以下代码以在片段可见时更新视图/日期。

@Override
    公共无效 onStart() {
            if (isVisibleToUser)
                更新视图();
    }

然后在您的 TabFragment 或 Activity 中实现它

viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            公共无效 onPageSelected(int position) {

                开关(位置){
                    案例0:{
                         ((Fragment) mFragmentList.get(0)).updateView();
                        休息;
                    }
                    情况1: {
                         ((Fragment) mFragmentList.get(1)).updateView();
                        休息;
                    }
                }
            }

这将负责一致地更新数据,您可以滑动或单击选项卡,它经过良好测试,如果有人发现任何问题或错误,请发表评论并让我知道或随时编辑解决方案。

于 2016-05-27T23:06:15.327 回答
0

尝试这个

mViewPager.setOffscreenPageLimit(2); // if you use 3 tabs 
mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                mTabLayout.getTabAt(position).select();
            }
});

注意mViewPager.setOffscreenPageLimit(2);默认值为 1 但我在使用 recyclerview 时遇到了一些问题

于 2015-09-01T07:34:15.927 回答