写在前面的废话
以前写过一个databind的adapter,吹牛说再也不用写adapter和viewholder了,遗憾的是限制比较大,比较坑。后来一直想写一个万能的adapter,本意就是不想写adapter了。今天写了一个,个人感觉还能用吧,没啥限制,只是viewholder还是要写的。没有啥营养的废话就这样吧,先来看看怎么用的吧,不喜欢的可以赶紧撤,不浪费大家时间。哈哈
` recycler = findViewById(R.id.recycler);
List<BaseType> iTypeList = new ArrayList<>();
for (int i = 0; i < 30; i++) {
StudentInfo studentInfo_one = new StudentInfo("张三", "10", "url");
iTypeList.add(BaseType.addType(R.layout.item_one, studentInfo_one));
StudentInfo studentInfo_two = new StudentInfo("张三", "10", "url");
iTypeList.add(BaseType.addType(R.layout.item_two, studentInfo_two));
}
BaseRecyclerAdapter adapter = new BaseRecyclerAdapter(this, iTypeList);
adapter.createViewHolderFactory(new ViewHolderFactory() {
@Override
public BaseRecyclerViewHolder getViewHolder(int viewType, View itemView) {
BaseRecyclerViewHolder baseRecyclerViewHolder = null;
switch (viewType) {
case R.layout.item_one:
baseRecyclerViewHolder = new OneHolder(itemView);
break;
case R.layout.item_two:
baseRecyclerViewHolder = new TwoHolder(itemView);
break;
}
return baseRecyclerViewHolder;
}
});
recycler.setLayoutManager(new LinearLayoutManager(this));
recycler.setAdapter(adapter);
复制代码
介绍
上面这是一个多类型的recyclerview的写法,我们先来简单的介绍下流程
- findView就不说啦
- 创建数据集合
List<BaseType> iTypeList = new ArrayList<>();
复制代码
- 填充数据集合
· for (int i = 0; i < 30; i++) {
//随意创建的一个对象 是类型1的viewholder所需要的bean
StudentInfo studentInfo_one = new StudentInfo("张三", "10", "url");
//添加数据 总要告诉我 item的layoutId和item所需的实体对象吧 不能再少了吧
iTypeList.add(BaseType.addType(R.layout.item_one, studentInfo_one));
//随意创建的一个对象 是类型2的viewholder所需要的bean
StudentInfo studentInfo_two = new StudentInfo("张三", "10", "url");
iTypeList.add(BaseType.addType(R.layout.item_two, studentInfo_two));
}
复制代码
- 数据准备好了,创建adapter(公共的,获取对象就行拉)
//不管你是啥 就这一个adapter
BaseRecyclerAdapter adapter = new BaseRecyclerAdapter(this, iTypeList);
复制代码
- adapter创建好了,我们需要创建viewholder啦,这个是具体实现啦,不能再少啦
adapter.createViewHolderFactory(new ViewHolderFactory() {
@Override
public BaseRecyclerViewHolder getViewHolder(int viewType, View itemView) {
BaseRecyclerViewHolder baseRecyclerViewHolder = null;
//根据type创建所需的viewholder
switch (viewType) {
case R.layout.item_one:
baseRecyclerViewHolder = new OneHolder(itemView);
break;
case R.layout.item_two:
baseRecyclerViewHolder = new TwoHolder(itemView);
break;
}
return baseRecyclerViewHolder;
}
});
复制代码
- 添加好了viewHolder之后基本就完成啦
//基本操作 没啥了
· recycler.setLayoutManager(new LinearLayoutManager(this));
recycler.setAdapter(adapter);
复制代码
- 我们来看下viewholder写的啥吧
//很简单了 findview+setViewData 一眼就看的明白了
public class OneHolder extends BaseRecyclerViewHolder<StudentInfo> {
public TextView textView;
public OneHolder(View itemView) {
super(itemView);
}
@Override
public void findView(View itemView) {
textView = itemView.findViewById(R.id.text);
}
@Override
public void setViewData(StudentInfo model) {
textView.setText(model.getName() + "类型一 " + getAdapterPosition());
}
}
复制代码
一个大大的结尾
不知道你们感觉如何呢,代码地址,有兴趣的可以看下哟。代码也比较简单,我就不详细介绍啦。一个简短的小介绍结束了。。。