我遇到了一个奇怪的问题,ViewPagersetCurrentItem(position, false)可以很好地工作,然后我切换到另一个 Activity ,而当我回到第一个 Activity 之后,ViewPager总是在第一个项目上结束。即使我已将setCurrentItem添加到onResume方法中,它仍然会忽略它。当我试图将项目设置为越界索引时,它甚至不会引发任何异常。
虽然稍后在我调用此方法时,当点击“下一步”按钮时,它的工作原理与预期的一样。
检查了我的代码10次以查找对setCurrentItem(0)或其他任何可能的调用,但根本不存在。

最佳答案

我无法真正回答为什么会这样,但是如果将setCurrentItem调用延迟几毫秒,它应该可以工作。我的猜测是,因为在onResume期间尚未进行渲染,所以ViewPager需要一个或类似的东西。

private ViewPager viewPager;

@Override
public void onResume() {
    final int pos = 3;
    viewPager.postDelayed(new Runnable() {

        @Override
        public void run() {
            viewPager.setCurrentItem(pos);
        }
    }, 100);
}

更新:故事时间

所以今天我有一个问题,就是viewpager忽略了我的setCurrentItem操作,并且我在stackoverflow上搜索了一个解决方案。我发现有人遇到同样的问题并已解决;我实现了此修复程序,但未成功。哇!回到stackoverflow以降低对该虚假修补程序提供者的投票,并...

那是我。我实现了我自己的有缺陷的非修复程序,这是我第一次偶然发现该问题时提出的(后来被遗忘了)。我现在不得不因提供错误的信息而对自己投反对票。

我最初的“修复”成功的原因不是因为“渲染通行证”;问题是寻呼机的内容是由微调器控制的。微调器和传呼器状态均在onResume上恢复,因此,在下一个事件传播周期期间,微调器onItemSelected监听器被调用,这确实重新填充了viewpager-这次使用了不同的默认值。
在初始状态恢复期间删除并重置监听器可解决此问题。

上面的这种修复方法第一次起作用,因为它在onItemSelected事件触发后将寻呼机设置为当前位置。后来,由于某种原因它停止工作(可能应用程序变得太慢-在我的实现中,我使用的不是100ms,而是10ms)。然后,我在清理周期中删除了postDelayed,因为它没有更改已经存在的错误行为。

更新2:我不能拒绝自己的帖子。我认为,尊敬的seppuku是剩下的唯一选择。

关于android - Android ViewPager setCurrentItem在onResume之后不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19316729/

10-09 13:31