如何更改ViewPager页面?

时间:2011-09-15 00:25:11

标签: android android-viewpager

我在我的应用程序中使用ViewPager并在主Activity中定义它。在onCreate方法内部,我从SharedPreferences中加载了一些页面,然后将其传递给PagerAdapter:

@Override
public int getCount() {
    return numberOfPages;
}

问题是,如果我将Preferences(或其他Activity)中的这个数字更改为我之前查看的其他页面索引,我的应用程序崩溃,因为当我使用此ViewPager返回活动时,此索引超出范围。只需更改活动的ViewPager页面即可修复它。有没有办法做到这一点?

5 个答案:

答案 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