vLayout使用注意事项

官方的github地址:https://github.com/alibaba/vlayout
vlayout的引用到项目中需要配置gradle:

compile 'com.alibaba.android:vlayout:1.2.14@aar'

引用到代码中可以如下使用:

//设置回收复用池大小,(如果一屏内相同类型的 View 个数比较多,需要设置一个合适的大小,防止来回滚动时重新创建 View):
RecyclerView.RecycledViewPool viewPool = new RecyclerView.RecycledViewPool();
recyclerView.setRecycledViewPool(viewPool);
viewPool.setMaxRecycledViews(0, 10);

DelegateAdapter delegateAdapter = new DelegateAdapter(layoutManager, true);//当hasConsistItemType=true的时候,不论是不是属于同一个子adapter,相同类型的item都能复用。表示它们共享一个类型。 当hasConsistItemType=false的时候,不同子adapter之间的类型不共享
recyclerView.setAdapter(delegateAdapter);
List<DelegateAdapter.Adapter> adapters = new LinkedList<>();
adapters.add(new CustomAdapter(this, new LinearLayoutHelper(), 1))//CustomAdapter是对DelegateAdapter.Adapter的继承实现

delegateAdapter.setAdapters(adapters);
//此类可以根据自定义实现
static class CustomAdapter extends DelegateAdapter.Adapter<MainViewHolder> {

        private Context mContext;
        private LayoutHelper mLayoutHelper;

        private LayoutParams mLayoutParams;
        private int mCount = 0;

        public CustomAdapter(Context context, LayoutHelper layoutHelper, int count) {
            this.mContext = context;
            this.mLayoutHelper = layoutHelper;
            this.mCount = count;
        }

        @Override
        public LayoutHelper onCreateLayoutHelper() {
            return mLayoutHelper;
        }

        @Override
        public MainViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            return new MainViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item, parent, false));
        }

        @Override
        protected void onBindViewHolderWithOffset(MainViewHolder holder, int position, int offsetTotal) {//position是当前的item占所有item中第position个位置,offsetTotal是当前SubAdapter占mCout个中第几个位置
            ((TextView) holder.itemView.findViewById(R.id.title)).setText(Integer.toString(offsetTotal));
        }

        @Override
        public int getItemCount() {//必须实现,用以显示当前item显示的个数
            return mCount;
        }
    }

vlayout适用范围:
1. 适用于多种不同的item项显示到啊同一个页面,同时这些不同item项的数据不一定保存到同一个数据容器中的情况下:【图片引用自http://www.jcodecraeer.com/a/anzhuokaifa/2018/0108/9088.html
这里写图片描述
图片中的数据假如是来自不同的服务器接口或者是不同的数据容器中,可以根据需要添加实现,但是每次添加到adapters中的时候必须根据当前页面的显示顺序添加
2. 每次更新数据需要修改CustomAdapter 中的数据,即根据CustomAdapter 中getItemCount方法获取到的个数显示
3. vlayout的属性可以参考https://github.com/alibaba/vlayout/blob/master/docs/ATTRIBUTES-ch.md
4. StickyLayoutHelper 调用setBgColor无效,背景需要设置到xml里
5. GridRangeStyle中setBgColor有可能会导致颜色错位,非必现
6. adapters不能重复添加同一个对象,如图中“热门新闻”与“优质新闻”需要在adapters中添加不同的subAdapter实现对象,同理页适用于GridRangeStyle.addChildRangeStyle

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值