Sim*_*ian 11 android android-viewpager
我一直在使用CWAC的EndlessAdapter在ListViews上实现无限滚动.
我想完成ViewPager的等价物.遗憾的是,PageAdapter和ListAdapter不共享相同的公共基类.
最好的方法是什么?是否存在已经处理此问题的库?
Com*_*are 15
最好的方法是什么?
为您自己的实现添加"无尽的"逻辑PagerAdapter.或者,如果您愿意,可以尝试创建装饰PagerAdapter,即EndlessAdapter装饰常规装饰的方式Adapter.
后者可能会很棘手,因为它PagerAdapter是针对视图或片段设计的,而类内部的片段处理FragmentPagerAdapter有点可怕.
是否存在已经处理此问题的库?
没有我知道的.
主要是因为用例似乎并不引人注目.使用a ListView,用户可以快速浏览列表,快速滚动数十行或数百行.因此,使用"我们到达终点"作为加载更多数据的触发器似乎是合理的.ViewPager但是,使用a ,通常需要更长的时间才能达到目的,特别是如果您不使用PagerTabStrip或等效的话.因此,等到用户一直到最后才开始加载其他数据似乎对用户来说很烦人 - 你有这么多时间来检索更多数据,但没有使用它.
另一种,因此,这是为你注册一个ViewPager.OnPageChangeListener与你的ViewPager.什么时候onPageSelected(),你认为自己接近最后,开始AsyncTask(或其他)去收集更多的数据.然后,美中不足的是,你将需要更新由所使用的数据PagerAdapter和呼叫notifyDataSetChanged()一旦数据已更新该适配器上.
@Override
public int getCount() {
return (Integer.MAX_VALUE);
//artificially large value for infinite scrolling
}
public int getRealCount(){
//Do something to return the actual number of objects.
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
int virtualPosition = position % getRealCount();
return instantiateVirtualItem(container, virtualPosition);
}
public Object instantiateVirtualItem(ViewGroup container, final int position) {
//Do the required part here
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
int virtualPosition = position % getRealCount();
destroyVirtualItem(container, virtualPosition, object);
}
public void destroyVirtualItem(ViewGroup container, int position, Object object){
container.removeView((View) object);
}
Run Code Online (Sandbox Code Playgroud)
现在,最重要的部分
pager.setOffscreenPageLimit(10); //your choice
pager.setCurrentItem(Integer.MAX_VALUE/2,false);
//pager is the ViewPager object
Run Code Online (Sandbox Code Playgroud)
PS:我已经成功实现了这一点.问你是否还有疑问.
也许你可以"伪装"如下:
您可能会显示huuuuge页数.使用FragmentStatePagerAdapter类:https:
//developer.android.com/reference/android/support/v13/app/FragmentStatePagerAdapter.html
getCount通过返回实现方法Integer.MAX_VALUE.
通过始终返回实现getItemPosition方法POSITION_NONE.
根据需要实现getItem方法,返回相应的Fragment.
然后,当承载ViewPager的Activity启动时,将ViewPager的初始位置设置为一个非常大的数字,例如viewPager.setCurrentItem(Integer.MAX_VALUE / 2);.
我自己没试过......,YMMV!:)
| 归档时间: |
|
| 查看次数: |
11166 次 |
| 最近记录: |