比如日历中,就会需要无限多页数的左右滑动。如何实现?难道要准备一个无限长的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`
}
}