老掉牙的RecyclerView,难道还有啥不知道的用法,
例如使用第三方的适配器:BaseQuickAdatper,
用法?无非就是RecyclerView.setLayoutManager(new Linear....()),然后setAdatper的嘛
然而很多博客论文都是抄来抄去,没点意思,现在就扒一扒你不知道的那些用法吧:
转载请注明出处:Write By xyx In cdsn @包罗万码
原文地址:https://blog.csdn.net/a316375/article/details/83043018
例如用法一:tools:listitem="@layout/activity_main"
以前学Eclipse的时候是listview,布局是在适配器Adatper里边去设置,然而Design里边并没有效果,
布局文件使用tools:listitem="@layout/activity_main"可以看到即时效果
<android.support.v7.widget.RecyclerView
.....
tools:listitem="@layout/activity_main"
..../>
小插曲:
recyclerView.setHasFixedSize(true);//当我们确定Item的改变不会影响RecyclerView的宽高的时候可以设置setHasFixedSize(true),并通过Adapter的增删改插方法去刷新RecyclerView,而不是通过notifyDataSetChanged()。(其实可以直接设置为true,当需要改变宽高的时候就用notifyDataSetChanged()去整体刷新一下)
用法二:如何正确构建一个RecyclerView.Adatper,现在copy很方便,甚至于忘了他是怎么一步一步写出来的,
不知道步骤,永远在模仿,无法去超越;复杂的事情简单说:
步骤1.继承RecyclerView.Adapter再创建类中类RecycleView.ViewHodler的子类,如下会报两个红线:
public class ListAdatper extends RecyclerView.Adapter {
class Hoder extends RecyclerView.ViewHolder{}
}
先解决掉类中类的报错,Alt+Enter添加一个构造函数
public class ListAdatper extends RecyclerView.Adapter {
class Hoder extends RecyclerView.ViewHolder{
private TextView textView;
public Hoder(View itemView) {
super(itemView);
textView=itemView.findViewById(R.id.tv);
}
}
}
然后RecycleView.Adatper后面添加<ListAdatper.Hoder>再按Alt+Enter;添加三个方法不报错
public class ListAdatper extends RecyclerView.Adapter<ListAdatper.Hoder> {
@NonNull
@Override
public Hoder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return null;
}
@Override
public void onBindViewHolder(@NonNull Hoder holder, int position) {
}
@Override
public int getItemCount() {
return 0;
}
class Hoder extends RecyclerView.ViewHolder{
......
}
}
这三个方法对应解决:
public class ListAdatper extends RecyclerView.Adapter<ListAdatper.Hoder> {
List<String> strings=new ArrayList<>();
@NonNull
@Override
public Hoder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view=LayoutInflater.from(parent.getContext())
.inflate(R.layout.activity_main,parent,false);
return new Hoder(view);
}
@Override
public void onBindViewHolder(@NonNull Hoder holder, int position) {
String name=strings.get(position);
holder.textView.setText(strings.get(position));//这里可以直接写name,假如List里边不是String而是自己的Bean对象,则xxx.get(position);
}
@Override
public int getItemCount() {
return strings.size();
}
//更新数据
public void setStrings(List<String> list){
this.strings=list;
notifyDataSetChanged();
}
class Hoder extends RecyclerView.ViewHolder{.....}
}
第一步返回一个布局new Hoder(view)
第二步赋值holder.textView.(xx.get(position))
第三步设置大小
第四步设置一个更新数据的方法
三.设置item间距为重叠
recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
if (parent.getChildAdapterPosition(view) != (lists.size() - 1)) {
outRect.bottom = -150; }
}
});
本人很懒,一般不带图,新人觉得有点帮助就点个关注,
持续更新2018最新最简单的Android见解
Android那点事,每年都说不完,
复杂的事情简单说,csdn@包罗万码
构造Adatper,只需要一个类中类,然后三个方法,每个方法也就是两三行代码,足以,4个步骤构造一个原生的Adatper,
不需要第三方架构,还要花时间去看别人doc,出了bug也没法修,自己写原生,bug自己挖坑自己埋,别人挖的坑没得埋.