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

来源:互联网 发布:三网合一网络箱 编辑:程序博客网 时间:2024/05/18 01:29

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