PagerAdapter开始位置

Kir*_*kov 68 android swipe android-viewpager

我使用以下示例来表达我的viewPager:http: //code.google.com/p/viewpagerexample/issues/list

这个例子的问题是我无法弄清楚如何设置我的起始位置,默认的起始位置是0.基本上我不能控制左边或右边是否有可用的视图.

有没有办法控制中心的View当前位置?有更好的方法吗?是否有可能使其圆形?

Kir*_*kov 157

我找到了一种方法来设置它的位置,这是在课外完成的:

 awesomePager = (ViewPager) findViewById(R.id.awesomepager);
 awesomePager.setAdapter(awesomeAdapter);
 awesomePager.setCurrentItem(CurrentPosition);
Run Code Online (Sandbox Code Playgroud)

它可以通过计算我想要适合它的项目数量来限制

  • 请注意,如果`awesomeAdapter`由Cursor/LoaderManager支持,则需要注意何时调用`setCurrentItem`以避免窃取焦点(太迟)或根本无法移动页面(太早) - 请参阅[这个](http://stackoverflow.com/a/24174114/404960) (4认同)

Mal*_*asz 19

我注意到如果你使用具有FragmentStatePagerAdapter的ViewPager重新创建Activity(方向更改),那么Adapter将重用它的Fragments.阻止它的方法是:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    if (viewPager != null) {
        // before screen rotation it's better to detach pagerAdapter from the ViewPager, so
        // pagerAdapter can remove all old fragments, so they're not reused after rotation.
        viewPager.setAdapter(null);
    }
    super.onSaveInstanceState(savedInstanceState);
}
Run Code Online (Sandbox Code Playgroud)

但是在Activity休闲之后ViewPager alwayes首先打开第0页和setCurrentItem(CurrentPosition); 不起作用.修复此问题是延迟后更改页面:

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


Hel*_*ali 16

从最后一个片段开始,我做了这个:

PagerAdapter pagerAdapter = new PagerAdapter();
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(pagerAdapter.getCount() - 1);
Run Code Online (Sandbox Code Playgroud)


小智 8

我遇到了一个问题,如果我在设置适配器之前设置当前项目,我回来的第一个项目将始终是位置0的项目.

确保你这样做:

awesomePager.setAdapter(awesomeAdapter);
awesomePager.setCurrentItem(CurrentPosition);
Run Code Online (Sandbox Code Playgroud)

并不是:

awesomePager.setCurrentItem(CurrentPosition);
awesomePager.setAdapter(awesomeAdapter);
Run Code Online (Sandbox Code Playgroud)


Suh*_*han 6

我有一个大小超过1000的数组,在dymanic viewpager中,我正面临leftswipe卡在firstload上.下面的代码解决了这个问题并导致了平滑滚动:

@Override
onResume(){
   super.onResume();
   viewPager.setCurrentItem(newPosition);
}
Run Code Online (Sandbox Code Playgroud)


Lee*_*dev 5

我正在使用 3 个片段,在启动我的应用程序时,默认情况下将显示第二个(中间)片段。只是我正在使用 onResume 函数,一切都很好。

@Override
protected void onResume() {
    super.onResume();
    m_viewPager.setCurrentItem(1);
}
Run Code Online (Sandbox Code Playgroud)


You*_*mal 5

使用viewPager.setCurrentItem(newPosition);向用户显示从起始页到 的转换newPosition,为了防止这种情况发生并直接显示newPosition,就好像它是起始点一样,我false向第二个参数添加了如下内容:

int newPosition = pages.size()-1; // Get last page position

viewPager.setCurrentItem(newPosition, false); // 2nd parameter (false) stands for "smoothScroll"
Run Code Online (Sandbox Code Playgroud)