![](/img/trans.png)
[英]Android - TabLayout & ViewPager > Fragments > OnListFragmentInteractionListener
[英]Android in TabLayout, ViewPager Fragments not updating consistantly
我的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);
您应该实现setOnTabSelectedListener
:
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
viewPager.setCurrentItem(tab.getPosition());
}
});
它晚了,但我想出了使用FragmentPagerAdapter的最佳方法
首先,在viewpager create方法中使用的所有片段如下所示。
public void updateView() { //Update whatever views or data you want to update }
还要重写FragmentPagerAdapter中使用的setUserVisibleHint方法,以通知该片段是否对用户可见。
@Override public void setUserVisibleHint(boolean isVisibleToUser) { this.isVisibleToUser = isVisibleToUser; super.setUserVisibleHint(isVisibleToUser); }
最后,在片段中添加以下代码,以在片段可见时更新视图/日期。
@Override public void onStart() { if (isVisibleToUser) updateView(); }
然后在您的TabFragment或Activity中实现
viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { switch (position) { case 0: { ((Fragment) mFragmentList.get(0)).updateView(); break; } case 1: { ((Fragment) mFragmentList.get(1)).updateView(); break; } } }
滑动或单击选项卡,即经过良好测试的数据包,将始终如一地更新数据,如果有人发现任何问题或错误,请发表评论,并让我知道或随时编辑解决方案。
尝试这个
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中使用它时遇到了一些麻烦
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.