我遇到了这个奇怪的问题ViewPager
's setCurrentItem(position, false)
工作得很好,然后我切换到另一个活动,在我回到第一个活动后,ViewPager
总是以第一个项目结束。尽管我已经添加了setCurrentItem
to 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 侦听器在下一个事件传播周期期间被调用,这确实重新填充了视图寻呼机 - 这次使用不同的默认值。
在初始状态恢复期间删除并重置侦听器修复了该问题。
上面的修复第一次起作用了,因为它设置了寻呼机的当前位置after触发了 onItemSelected 事件。后来,它由于某种原因停止工作(可能应用程序变得太慢 - 在我的实现中我没有使用 100 毫秒,而是 10 毫秒)。然后我在清理周期中删除了 postDelayed,因为它没有改变已经有错误的行为。
更新2:我不能对自己的帖子投反对票。我想,尊贵的切腹者是唯一的选择了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)