正确使用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"可以看到即时效果

<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自己挖坑自己埋,别人挖的坑没得埋.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在fragment中使用RecyclerView,需要执行以下步骤: 1.在fragment的布局文件中添加RecyclerView: ``` <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 2.在fragment中声明RecyclerView: ``` private RecyclerView mRecyclerView; ``` 3.在onViewCreated()方法中初始化RecyclerView: ``` @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mRecyclerView = view.findViewById(R.id.recyclerView); // 设置RecyclerView的布局管理器 mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); // 设置RecyclerView的适配器 mRecyclerView.setAdapter(new MyAdapter()); } ``` 4.创建RecyclerView的适配器: ``` private class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private List<String> mData = new ArrayList<>(); @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { holder.textView.setText(mData.get(position)); } @Override public int getItemCount() { return mData.size(); } public class ViewHolder extends RecyclerView.ViewHolder { private TextView textView; public ViewHolder(@NonNull View itemView) { super(itemView); textView = itemView.findViewById(R.id.text); } } } ``` 5.在适配器中填充数据: ``` private void initData() { for (int i = 0; i < 20; i++) { mData.add("Item " + i); } } ``` 6.在fragment的onCreate()方法中调用initData()方法,完成数据填充。 ``` @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); initData(); } ``` 注意:在使用RecyclerView时,需要注意数据填充的顺序。在适配器中填充数据时,需要先在fragment的onCreate()方法中调用initData()方法,完成数据填充,然后再在onViewCreated()方法中设置RecyclerView的适配器。这样才能保证RecyclerView中显示的是正确的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值