如何更改ViewPager的页面?

Rom*_*man 146 android android-viewpager

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

@Override
public int getCount() {
    return numberOfPages;
}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*son 390

我不确定我是否完全理解这个问题,但从问题的标题来看,我猜你正在寻找的是什么pager.setCurrentItem( num ).这允许您以编程方式切换到其中的另一个页面ViewPager.

如果这不是问题,我需要从logcat看到更具体的堆栈跟踪.

  • 是的,这正是我需要的.我在`onPause`方法中将它设置为'0`并且没有崩溃.谢谢. (3认同)

Abr*_*yev 19

向右滑动

viewPager.arrowScroll(View.FOCUS_RIGHT);

向左滑动

viewPager.arrowScroll(View.FOCUS_LEFT);


小智 17

如果不检查您的代码,我认为您所描述的是您的页面不同步而且您有过时的数据.

你说你正在改变页数,然后崩溃,因为你正在访问旧的页面集.这听起来就像你pageAdapter.notifyDataSetChanged()在更改数据后没有打电话一样.

当您viewPager显示一组10页的第3页,并且您更改为仅有5的一组时,然后调用notifyDataSetChanged(),您将找到的是您现在正在查看新组的第3页.如果您之前正在查看旧集的第8页,则在放入新集并进行呼叫后,notifyDataSetChanged()您会发现现在正在查看新集的最后一页而不会崩溃.

如果您只是更改当前页面,则可能只是掩盖了问题.


小智 13

要切换到另一个页面,请尝试使用以下代码:

viewPager.postDelayed(new Runnable()
{
    @Override
    public void run()
    {
        viewPager.setCurrentItem(num, true);
    }
}, 100);
Run Code Online (Sandbox Code Playgroud)