vLayout的使用

                  今天给大家介绍一款新的布局管理器,针对 RecyclearView 的布局管理作出了优化,也是在做电商的时候非常让我头疼的一件事,那就是首页,下面我们看一组图片,对于搜索框一下的那一部分怎么去写 ??  一开始我是想上面用一个轮播图,下面使用一个RecyclearView多条目展示,本身实现其实不是很难的事,但是啊。。。。。要是使用多条目这要写好多呀,要写四五种类型,这样的话我们这个adapter是非常冗余的,结果我在网上找到了一个新的方法,也是阿里搞出来的我就学了学果然很好使,接下来给大家介绍一下

一、导入依赖

implementation('com.alibaba.android:vlayout:1.2.8@aar') {
        transitive = true
    }

 二、创建一个adapter,这个adapter一定要继承DelegateAdapter.Adapter

 

package com.wd.tech.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.InflateException;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.alibaba.android.vlayout.DelegateAdapter;
import com.alibaba.android.vlayout.LayoutHelper;
import com.wd.tech.R;

public    class MyAdapter extends DelegateAdapter.Adapter<MyAdapter.MainViewHolder> {

    private Context mContext;

    public MyAdapter(LayoutHelper layoutHelper,Context context) {
        this.layoutHelper = layoutHelper;
        this.mContext = context;
    }

    private LayoutHelper layoutHelper;


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

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

    @Override
    public void onBindViewHolder(MainViewHolder holder, int position) {
        holder.txtView.setText("小花猫"+position);
        /*if (position > 7) {
            holder.itemView.setBackgroundColor(0x66cc0000 + (position - 6) * 128);
        } else if (position % 2 == 0) {
            holder.itemView.setBackgroundColor(0xaa22ff22);
        } else {
            holder.itemView.setBackgroundColor(0xccff22ff);
        }*/
    }

    @Override
    public int getItemCount() {
        return 40;
    }

    class MainViewHolder extends RecyclerView.ViewHolder{

        TextView txtView;

        public MainViewHolder(View itemView) {
            super(itemView);
            txtView = itemView.findViewById(R.id.txtView);
        }
    }

}

三、我的activity中的代码详情分析 

     
        recyView = (RecyclerView)findViewById(R.id.show_recy);


        //创建VirtuaLayoutManager
        VirtualLayoutManager layoutManager = new VirtualLayoutManager(this);
        recyView.setLayoutManager(layoutManager);

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

        //创建delegateadapter
        DelegateAdapter delegateAdapter = new DelegateAdapter(layoutManager, true);

        //创建了连个helper一个垂直的,一个为网格的
        LinearLayoutHelper linearHelper = new LinearLayoutHelper(10);
        GridLayoutHelper gridHelper = new GridLayoutHelper(2);

        //为垂直的设置背景颜色
        linearHelper.setBgColor(Color.GREEN);

        //创建一个adapter的list
        List<DelegateAdapter.Adapter> adapters = new ArrayList<>();
        //向list中添加adapter
        adapters.add(new MyAdapter(linearHelper,this));
        adapters.add(new MyAdapter(gridHelper,this));


        //delegateAdapter可以设置一个Adapter的lsit
        delegateAdapter.setAdapters(adapters);

        //为recyView设置 adapter
        recyView.setAdapter(delegateAdapter);

 

四、展示效果

 

 


版权声明:本文为weixin_41649874原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。