提问者:小点点

ViewPager2 setCurrentItembug解决方法?


这个报道的bug给我带来了问题;https://issuetracker.google.com/issues/183847283

当与FragmentStateAdapter结合使用时,ViewPager2. setCurrentItem并不总是有效。TabLayout正确更改(如果您有),但ViewPager2本身并未显示正确的页面。

有人找到变通方法了吗?


共2个答案

匿名用户

我有一个类似的问题,如果不一样的话。解决方案是以特定的顺序更改片段/选项卡/页面

  1. 应该首先通知FragmentStateAdapter片段的更改。
  2. 然后TabLayout应该在post
  3. 下调用selectTab
  4. 然后ViewPager应该在TabLayoutpost中的post下调用setCurrentItemselectTab

这可能是矫枉过正,但它对我有用。

例子

//or some other notify depending on your use case.
fragmentStateAdapter.notifyItemInserted(position);

tabLayout.post(()->{
     tabLayout.selectTab(tabLayout.getTabAt(position));
     viewPager2.post(()->{
          viewPager2.setCurrentItem(position);
          //I noticed on older devices like API 19
          //the viewPager wouldn't complete transformations
          //so we call this.
          viewPager2.requestTransform();
     });
});

匿名用户

viewPager.setCurrentItem(tab.getPosition());
                if (tab.getPosition()==0||tab.getPosition()==1||tab.getPosition()==2||tab.getPosition()==3){
                    pagerAdapter.notifyDataSetChanged();
                }