viewPager.setCurrentItem()无效

时间:2015-09-04 15:48:16

标签: android android-fragments android-viewpager

setCurrentItem()函数不适用于以下android(java)代码如何使其工作?

    Intent i = getIntent();
    int position = i.getIntExtra("img", 0);
    viewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
    ImageAdapter adapter = new ImageAdapter(this);
    viewPager.setAdapter(adapter);
    viewPager.setCurrentItem(position);

4 个答案:

答案 0 :(得分:4)

private ViewPager viewPager;

@Override
public void onResume() {
 Intent i = getIntent();
int position = i.getIntExtra("img", 0);
viewPager.postDelayed(new Runnable() {

    @Override
    public void run() {
        viewPager.setCurrentItem(position);
    }
 }, 100);
}

答案 1 :(得分:3)

弗兰克是对的。要独立提供滚动设备,您应该使用onGlobalLayoutListener。因此,您可以保证在调用viewPager.setCurrentItem(position)时呈现视图。否则setCurrentItem不会产生任何影响,因为视图还没有渲染。

viewPager.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
        {
            @Override
            public void onGlobalLayout()
            {
                viewPager.setCurrentItem(position, false);
            }
        });

我知道这个问题已经过时了,但也许别人会发现这个问题很有用!

答案 2 :(得分:3)

这些答案都不适合我 - 我花了好几个小时才发现我忘了更新getCount()

getCount()实施中的FragmentPagerAdapter方法显示错误的计数,因此无法更改页面,因为它不是计数的一部分。

答案 3 :(得分:0)

仅使用androidx中的视图扩展名,以kotlin添加一个简短的答案

view_pager.doOnLayout {
    view_pager.setCurrentItem(position, false)
}

请注意,使用全局布局的previos答案不会删除不建议使用的OnGlobalLayoutListener后缀。

androidx分机doOnLayout做到了。

请确保您具有gradle依赖项: 实现'androidx.core:core-ktx:1.3.2'