我在我的应用程序中使用ViewPager并在主Activity中定义它 . 在 onCreate
方法中,我从SharedPreferences加载了一些页面,然后将它传递给PagerAdapter:
@Override
public int getCount() {
return numberOfPages;
}
问题是,如果我将Preferences(或其他Activity)中的这个数字更改为我之前查看的其他页面索引,我的应用程序崩溃,因为当我使用此ViewPager返回活动时,此索引超出范围 . 只需更改活动的ViewPager页面即可修复它 . 有什么办法吗?
5 回答
要切换到另一个页面,请尝试使用以下代码:
我猜你正在寻找的是
pager.setCurrentItem( num )
. 这允许您以编程方式切换到ViewPager
中的另一个页面 .如果这不是问题,我需要从logcat看到更具体的堆栈跟踪 .
Supplemental answer
我原本无法从其他类方法获取对
ViewPager
的引用,因为addOnTabSelectedListener
创建了一个匿名内部类,而后者又要求将ViewPager
变量声明为final
. 解决方案是使用类成员变量而不使用匿名内部类 .向右滑动
viewPager.arrowScroll(View.FOCUS_RIGHT);
向左滑动
viewPager.arrowScroll(View.FOCUS_LEFT);
如果不检查您的代码,我认为您所描述的是您的页面不同步而且您有过时的数据 .
你说你正在改变页数,然后崩溃,因为你正在访问旧的页面集 . 这听起来像你在更改数据后没有调用
pageAdapter.notifyDataSetChanged()
.当
viewPager
显示一组10页的第3页,并且您更改为仅有5的设置时,然后调用notifyDataSetChanged()
,您将找到的是您现在正在查看新设置的第3页 . 如果您之前正在查看旧集的第8页,则在放入新集并调用notifyDataSetChanged()
之后,您会发现现在正在查看新集的最后一页而不会崩溃 .如果您只是更改当前页面,则可能只是掩盖了问题 .