好早之前就在用RecyclerView了,都是在项目里封装好然后就直接用了,这次需要重写然后就遇到了一个叛逆版的RecyclerView好多的具体写法都模糊了,所以在这里记录一下。
首先我想用最新版,那你就去studio的projectsetting下的moudle下的dependencies中添加library dependency 直接搜索就好,看准是com.android.suport;
1.在xml中添加
<android.support.v7.widget.RecyclerView
2.定义adapter 继承
RecyclerView.Adapter
3.在adapter中定义内部类继承
RecyclerView.ViewHolder
在viewholder中绑定控件
4.在adapter的
onCreateViewHolder
中引入布局初始化viewholder
onBindViewHolder
中对view holder强转为自定义类型对控件进行操作
5.
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);//除了linerlayout外还有gridlayout和瀑布流
RecyclerView.setLayoutManager(layoutManager);
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this,DividerItemDecoration.VERTICAL);
dividerItemDecoration.setDrawable();//可以放入自定义的分割线样式
RecyclerView.addItemDecoration(dividerItemDecoration);
RecyclerView.setAdapter(adapter);
遇到了一个问题
ViewHolder views must not be attached when created. Ensure that you are not passing 'true' to the attachToRoot parameter of LayoutInflater.inflate(..., boolean attachToRoot)
当时查找了好多认为是inflate中的attachToRoot有问题,可是最后修改的是adapter中
onCreateViewHolder方法下的item视图引入的
View view = LayoutInflater.from(viewGroup.getContext())
这个from参数的context来源我之前写成了从activity传过来的context,应该用onCreateViewHolder方法中
ViewGroup参数get到的,viewGroup.getContext();从看了一下源码这个参数的getcontext得到的是recylerview.this。