我正在使用ViewPager2创建幻灯片。比如,这个幻灯片有三项内容,我希望在活动打开时显示第二项内容。我使用了setCurrentItem(int item, boolean smoothScroll)
方法,但它没有起作用,什么都没有发生。我该如何实现呢?
viewPager.adapter = adapter
viewPager.setCurrentItem(1, true)
我正在使用ViewPager2创建幻灯片。比如,这个幻灯片有三项内容,我希望在活动打开时显示第二项内容。我使用了setCurrentItem(int item, boolean smoothScroll)
方法,但它没有起作用,什么都没有发生。我该如何实现呢?
viewPager.adapter = adapter
viewPager.setCurrentItem(1, true)
reviewWordViewPager.addOnPageChangeListener(changeListener);
reviewWordViewPager.setCurrentItem(viewPosition, true/false);
reviewWordTabIndicator.setupWithViewPager(reviewWordViewPager, true);
(Java) ViewPager2 的解决方案:
wordViewPager.registerOnPageChangeCallback(viewPager2OnPageChangeCallback);
wordViewPager.setCurrentItem(vpPosition, true/false);
new TabLayoutMediator(tabIndicator, wordViewPager,
((tab, position) -> tab.setText(viewPagerTitle[position]))).attach();
我没有查询ViewPager2是否需要在ViewPager中使用以下旧代码
@Override
public int getItemPosition(@NonNull Object object) {
// refresh all fragments when data set changed
return POSITION_NONE;
}
但令人惊讶的是,在ViewPager2中解决我一直遇到的问题时不需要它,希望能帮助其他人。
如果您使用context.startActivity
启动新活动,则无需在onResume
函数中使用wordViewPager.setCurrentItem(item, smoothScroll)
来返回到您启动新活动之前选择的最后一个选项卡,只需在onStop
函数中保存ViewPager/ViewPager2位置,例如:vpPisition = wordViewPager.getCurrentItem();
。
vpPisition
是全局变量。
首先,您需要在任何侦听器或按钮下初始化主活动,然后在此之后,您需要放置这行代码... 这里的MainActivity是您正在使用的ViewPager主类,2是您想要移动到的位置。
MainActivity main = (MainActivity ) mContext;
main.selectTab(2, true);