正确使用RecyclerView你不知道的那些用法

老掉牙的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"可以看到即时效果

 小插曲:

 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后面添加再按Alt+Enter;添加三个方法不报错

public class ListAdatper extends RecyclerView.Adapter {
    @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 {
    List 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 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自己挖坑自己埋,别人挖的坑没得埋.

 

你可能感兴趣的:(正确使用RecyclerView你不知道的那些用法)