课程/Android/移动开发
不一样的RecyclerView优雅实现复杂列表布局
-
-
weibo_静默nupt_0
2018-02-02
- 不错
-
截图
0赞 · 0采集
-
-
最後的最後_
2017-03-27
- 效果图
-
截图
0赞 · 0采集
-
-
最後的最後_
2017-03-27
- !!!
-
截图
0赞 · 0采集
-
-
最後的最後_
2017-03-27
- ***然后根据不同的类型去取不同的数据。
-
截图
0赞 · 0采集
-
-
最後的最後_
2017-03-27
- ***然后还要把三个列表给存进来,
-
截图
0赞 · 0采集
-
-
最後的最後_
2017-03-27
- ***然后还要去Adapter当中进行改造,找到onBindViewHolder()方法,将((TypeAbstractViewHolder))holder).bingHolder(mList.get(position));
改成: int viewType = getItemViewType(position);//首先通过该方法得到相应位置的viewType然后去得到一个realPosition,其等于目前传进来的position减去我们拿到的那个起始位置的position,realPosition就是在对应每个列表当中的position.
-
截图
0赞 · 0采集
-
-
最後的最後_
2017-03-27
- ***因为DataModel不需要用了,所以现在要修改一下那三个ViewHolder.将bindHolder()方法的参数改成相应的Model的对象。然后在前面的类名继承的那个TypeAbstractViewHolder中指定相应的泛型即可。
-
截图
0赞 · 0采集
-
-
最後的最後_
2017-03-27
- ***将TypeAbstractViewHolder进行修改一下,将抽象方法bindHolder()里面的参数:DataModel model 改成用泛型表示即可
:T model
-
截图
0赞 · 0采集
-
-
最後的最後_
2017-03-27
- ***1、改写addList()方法里面的参数。
2、创建addListByType()方法,
3、创建一个list集合,泛型指定为Integer,里面承装的是type类型的值。
4、将getItemViewType()方法的返回值:mlist.get(position).type改成:types.get(postion)
5、将getItemCount()方法的返回值:mlist.size()改成:types.size();
6、List<Integer>的对象types是我们的第一个数据结构,利用addListByType()方法里面的for循环将每一个type放到types里面
7、然后我们还需要一个数据结构,来记录每个类型的List在types里面的起始位置是什么,需要用Map去记录。
8、因为现在我们用types这个数组去遍历的话,我们根本就不知道每个对应上的position在这三个列表当中对应的真实数据的位置是不知道的。
9、所以我们干脆把每个list的起始位置在types中的哪里,把它给记录下来。-mpostion.put(type,types.size())。types的长度就是下一个list的起始位置。
10、因为原来的DataModel里面定义的那些类型值不需要再被引用了,将其复制到Adapter当中即可。然后这样子封装完之后,在addList()方法里面,调用addListByType()方法,将各个list以及其对应的类型作为参数传进去。
11、做完上一步之后只需要遍历types然后根据mposition去拿数据就好了。
-
截图
0赞 · 0采集
-
-
最後的最後_
2017-03-27
- !!!
-
截图
0赞 · 0采集
-
-
最後的最後_
2017-03-27
- 这是原来的Adapter。我们现在要进行改造,因为原来的Adapter只能够放一个list。
-
截图
0赞 · 0采集
-
-
a664215432
2017-02-18
- 老师讲课没激情~~~
-
截图
1赞 · 0采集
-
-
xzhang76
2016-12-24
- RecyclerView实现多数据类型的list和grid混编
4.三个ViewHolder的改造
ViewHolder的bindViewHolder()会讲viewHolder的控件成员和对应位置的数据绑定,但是现在有三种不同的数据类型,如何解决?
(1)三种数据ViewHolder继承RecyclerView.ViewHolder,各自实现
在onBindViewHolder()中根据不同viewType绑定不同的数据
(2)还是抽象一个ViewHolder,用T范型
public abstract class AbstractViewHolder<T> extends RecyclerView.ViewHolder{
public AbstractViewHolder(View itemView) {
super(itemView);
}
public abstract void bindViewHolder(T dataModel);
}
5.Adapter的改造
(1)getItemCount()和getItemViewType()
由于mTypes根据位置存放了所有数据的类型,所以可以直接从mTypes获取
public int getItemViewType(int position) {
return mTypes.get(position);
}
(2)onCreateViewHolder() onBindViewHolder()
如图,需要说明:
int realPosition = position - mFirstPositions.get(viewType);
是从每个list中取出item在它对应的数据列表的真实位置,这样可以拿出item的数据mList1.get(realPosition)
然后拿这个数据来和viewHolder的控件绑定
holder.bindViewHolder(mList1.get(realPosition));
-
截图
0赞 · 0采集
-
-
慕粉3879365
2016-12-13
- 数据结构
-
截图
0赞 · 0采集
-
-
慕__女神
2016-12-07
- 绑定View
-
截图
0赞 · 0采集
-
-
guochenchn
2016-11-20
- 分别从list种拿数据
-
截图
0赞 · 1采集
-
-
guochenchn
2016-11-20
- 怎么取不同集合数据
-
截图
0赞 · 3采集