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