今天给大家介绍一款新的布局管理器,针对 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版权协议,转载请附上原文出处链接和本声明。