PagerAdapter开始位置

我使用下面的示例来实现viewPager: http : //code.google.com/p/viewpagerexample/issues/list

这个例子的问题是,我不知道如何设置我的起始位置,默认的开始位置是0.基本上我不能够控制是否有一个可用的观点在其左侧或右侧。

有没有办法控制中心的查看当前位置? 有没有更好的方法来做到这一点? 有可能使它成为循环?

我find了一个方法来设置它的位置,这是在课堂之外完成的:

awesomePager = (ViewPager) findViewById(R.id.awesomepager); awesomePager.setAdapter(awesomeAdapter); awesomePager.setCurrentItem(CurrentPosition); 

并且可以通过计算我想要适合的项目数量来进行限制

我注意到,如果你用ViewPager创build了FragmentStatePagerAdapter的Activity(orientation change),那么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); } 

但是在Activity休闲之后ViewPager的alwayes首先打开第0页并且setCurrentItem(CurrentPosition); 不起作用。 修复这是延迟后更改页面:

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

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

确保你做到:

 awesomePager.setAdapter(awesomeAdapter); awesomePager.setCurrentItem(CurrentPosition); 

并不是:

 awesomePager.setCurrentItem(CurrentPosition); awesomePager.setAdapter(awesomeAdapter); 

我有一个大小超过1000的数组,在dymanic viewpager中,我正面临着leftload上的Leftwipe。 下面的代码解决了这个问题,并导致顺利滚动:

 @Override onResume(){ super.onResume(); viewPager.setCurrentItem(newPosition); } 

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

 PagerAdapter pagerAdapter = new PagerAdapter(); viewPager.setAdapter(pagerAdapter); viewPager.setCurrentItem(pagerAdapter.getCount() - 1); 

我使用3个片段,并启动我的应用程序,第二个( )片段将默认显示。 只是我使用的onResumefunction,所有的伟大作品。

 @Override protected void onResume() { super.onResume(); m_viewPager.setCurrentItem(1); } 
 @Override public Object instantiateItem(ViewGroup container, int position) { View currentPage = null; switch(position){ case 0: currentPage = LayoutInflater.from(context).inflate(R.layout.page0, null) break; case 1: currentPage = LayoutInflater.from(context).inflate(R.layout.page1, null) ///////////// This page will be default //////////////////// ((ViewPager)container).setCurrentItem(position); //////////////////////////////////////////////////////////// break; case 2: currentPage = LayoutInflater.from(context).inflate(R.layout.page2, null) break; return currentPage; } 

我遇到了同样的问题。 当我初始化ViewPager时,指标位置为0.这可能取决于传呼机内容的计算量。 我使用下面的ViewTreeObserver。

 mGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { mViewPager.setCurrentItem(newPosition); removeOnGlobalLayoutListener(mSlidingTabLayout.getViewTreeObserver(), mGlobalLayoutListener); } }; mSlidingLayout.getViewTreeObserver().addOnGlobalLayoutListener(mGlobalLayoutListener); 

和,

 private void removeOnGlobalLayoutListener(ViewTreeObserver observer, ViewTreeObserver.OnGlobalLayoutListener listener) { if (observer == null) return; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { observer.removeGlobalOnLayoutListener(listener); } else { observer.removeOnGlobalLayoutListener(listener); } } 

这样,也永远不用担心延迟的时间设置。