ViewPager2 默认位置

42

我正在使用ViewPager2创建幻灯片。比如,这个幻灯片有三项内容,我希望在活动打开时显示第二项内容。我使用了setCurrentItem(int item, boolean smoothScroll)方法,但它没有起作用,什么都没有发生。我该如何实现呢?

viewPager.adapter = adapter
viewPager.setCurrentItem(1, true)

第二个项目是1。从0开始计数。 - shb
@shb 谢谢回复,但我写的示例代码是错误的。在我的代码中,这个是1,但它不起作用。 - hosseinAmini
你可能想分享更多的代码。你分享的代码运行得非常好。请分享你的viewPager适配器类,以及你从哪里调用它。 - shb
13个回答

1
我的回答可能现在并没有帮助,但我认为发表我的经验没有坏处。我刚刚使用ViewPager和ViewPager2遇到了这个问题,出乎意料的是,只需改变一些代码行的顺序就解决了它。
以下是ViewPager的(java)解决方案:
    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是全局变量。


1
我遇到了同样的问题。在我的情况下,我默认将viewPager2设置为不可见,直到网络请求成功后才显示出来,并通过在显示viewPager2后设置CurrentItem来解决它。

0

首先,您需要在任何侦听器或按钮下初始化主活动,然后在此之后,您需要放置这行代码... 这里的MainActivity是您正在使用的ViewPager主类,2是您想要移动到的位置。

 MainActivity main = (MainActivity ) mContext;
    main.selectTab(2, true);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接