我在我的应用程序中使用ViewPager,并在主活动中定义它。在onCreate
方法中,我从SharedPreferences加载了一些页面,然后将其传递给PagerAdapter:
@Override
public int getCount() {
return numberOfPages;
}
问题是,如果我在Preferences (或另一个活动)中将这个数字更改为比我之前查看的页面索引小的其他数字,我的应用程序就会崩溃,因为当我用这个ViewPager返回到活动时,这个索引是越界的。它可以简单地通过更改活动ViewPager的页面来修复。有什么办法可以做到吗?
发布于 2011-09-16 22:40:44
我不确定我是否完全理解了这个问题,但从你问题的标题来看,我猜你要找的是pager.setCurrentItem( num )
。这允许您以编程方式切换到ViewPager
中的另一个页面。
如果这不是问题所在,我需要查看来自logcat的堆栈跟踪。
发布于 2014-01-27 07:15:48
如果不检查你的代码,我认为你所描述的是你的页面不同步,你有陈旧的数据。
您说您正在更改页面的数量,然后崩溃,因为您正在访问旧的页面集。在我看来,您在更改数据后并没有调用pageAdapter.notifyDataSetChanged()
。
当您的viewPager
显示一组10页中的第3页时,您更改为只有5页的集合,然后调用notifyDataSetChanged()
,您将发现您现在正在查看新集合的第3页。如果您以前正在查看旧集合的第8页,在放入新集合并调用notifyDataSetChanged()
之后,您将发现现在正在查看新集合的最后一页,而不会崩溃。
如果你只是简单地改变你的当前页面,你可能只是掩盖了问题。
发布于 2016-09-16 05:05:55
要切换到另一个页面,请尝试使用以下代码:
viewPager.postDelayed(new Runnable()
{
@Override
public void run()
{
viewPager.setCurrentItem(num, true);
}
}, 100);
https://stackoverflow.com/questions/7424562
复制相似问题