您的位置:首页 > 移动开发 > Android开发

android:ViewPager的无限多页数的设置

2017-05-24 09:50 281 查看
比如日历中,就会需要无限多页数的左右滑动。如何实现?难道要准备一个无限长的
List<ItemView>
?那样会太占内存了。而且,也不可行。

改进如下:

可以准备一个无限长的
List<ItemBean>
里面存放的是每页需要显示的数据。而
ItemView
不要去管,在预加载中去创建,在回收中去移除即可。

详见如下示例代码:

private void setViewPager() {
ViewPager vp = (ViewPager) findViewById(R.id.bc_vp);

NoPager adapter = new NoPager();
vp.setAdapter(adapter);
int count = adapter.getCount();
int index;
if (count % 2 == 0) {
index = count / 2;
} else {
index = count / 2 + 1;
}
Logger.d("count = " + count + " , index = " + index);
vp.setCurrentItem(index);

}

private class NoPager extends PagerAdapter {
@Override
public int getCount() {
//  Integer.MAX_VALUE == 2147483647
return Integer.MAX_VALUE; // 1. 无限长搞定了
}

@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
View child = LayoutInflater.from(get()).inflate(R.layout.content_item, container, false);
// 2. 预加载中去创建`ItemView`
TextView tv = (TextView) child.findViewById(R.id.tv_content_item);
tv.setText("page " + position);
if (child.getParent() != container) {
container.addView(child);
}

return child;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object); // 3. 回收方法去移除`ItemView`
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: