android:RecyclerView的使用笔记

1、导入资源

在 build.gradle 文件下添加,记得点击 sync new

implementation 'com.android.support:recyclerview-v7:29.0.0'

2、准备容器和样式文件

容器 edit.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scrollbars="vertical"
        android:id="@+id/recycle_view"/>
</RelativeLayout>

my_item_view (自定义样式文件)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/text"
        android:textSize="28sp"
        android:background="#FFBB86FC"/>

</LinearLayout>

注意:在准备样式文件的时候,注意 LinearLayout 的 layout_height=“wrap_content”

3、准备adapter

    1)recyclerView 的 adapter 在写的时候和 BaseAdapter 很像,都需要一个 ViewHolder 类为样式文件适配各种数据。
    2)recycleview 的 adapter 相比于 baseAdapter 只需要重写3个方法,分别是:

    onCreateViewHolder(@NonNull ViewGroup parent, int viewType);
当自定义 adapter 在继承时使用 定义的 ViewHolder 作为数据类型,则在此方法返回的也是 ViewHolder类型。

    onBindViewHolder(@NonNull MyViewHolder holder, int position);
为 ViewHolder 类绑定数据。

    getItemCount();返回数据条数。

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    
    

    //接收数据
    private String datas[];

    public MyAdapter(String[] data){
    
    
        this.datas = data;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    
    
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_item_view,parent,false);
        MyViewHolder vm = new MyViewHolder(view);
        return vm;
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    
    
        holder.textView.setText(datas[position]);
    }

    @Override
    public int getItemCount() {
    
    
        return datas.length;
    }

	//自定义类,用于自定义样式适配数据
    public static class MyViewHolder extends RecyclerView.ViewHolder{
    
    
        public TextView textView;
        public MyViewHolder(View view){
    
    
            super(view);
            textView = view.findViewById(R.id.text);
        }
    }

}

4、在 java 文件中使用

 private RecyclerView recyclerView;
    private String[] mDataSet;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.edit);
        //lambda();
        //准备要插入的数据
        initDate();
        recyclerView = findViewById(R.id.recycle_view);
        //设置对齐方式
        recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
        //必须设置布局管理器
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
		//准备适配器
        MyAdapter adapter = new MyAdapter(mDataSet);
        recyclerView.setAdapter(adapter);
    }

    private void initDate(){
    
    
        mDataSet = new String[20];
        for (int i = 0;i < mDataSet.length;i++){
    
    
            mDataSet[i] = "This is item "+ i;
        }
    }

如果想实现类似淘宝的瀑布流效果,可以在设置布局管理器的时候使用:

//相比线性布局管理器多了一个参数 2 ,表示设置 2 列。
recyclerView.setLayoutManager(new GridLayoutManager(this,2));

猜你喜欢

转载自blog.csdn.net/weixin_49101726/article/details/120956058