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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值