RecyclerView实现ListView

首先先添加RecyclerView布局和它的子布局itemView,接下来为RecyclerView新建一个适配器adapter(这个适配器继承RecyclerView.Adapter,泛型是这个适配器Adapter.ViewHolder,其中ViewHolder是我们在这个适配器中定义的一个内部类.)

1.添加RecyclerView布局

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rv_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

2.添加RecyclerView子布局itemView

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <TextView
        android:id="@+id/tv_textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

3.新建RecyclerView适配器Adapter

public class DemoAdapter extends RecyclerView.Adapter<DemoAdapter.MyViewHolder> {
    
    
}

自动生成一下代码(传递数据源的函数需要自己写)

/**
 * 1.定义内部类MyViewHolder,通过findViewById()找到子布局中的实例
 * 2.定义一个构造函数,用于把要展示的数据源传递进来,并赋值给一个去全局变量(额外手写的函数)
 * 3.加载子布局,返回MyViewHolder实例
 * 4.得到Demo实例,对MyViewHolder赋值
 * 5.返回数据源长度
 */
public class DemoAdapter extends RecyclerView.Adapter<DemoAdapter.MyViewHolder> {
    
    
    private List<String> mDemoList;
    /**
    *这个方法是自定义的ViewHolder,通过findViewById()找到子布局的实例
    */
    public class MyViewHolder extends RecyclerView.ViewHolder {
    
    
        private TextView textV;
        public MyViewHolder(View itemView) {
    
    //这个itemView通常是RecyclerView子项的最外层布局
            super(itemView);
            textV = itemView.findViewById(R.id.tv_textView);//找到布局中的实例
        }
    }

    /**
    *这个方法用于把数据源传递进来,并赋值给一个全局变量,后续都用这个数据源
    */
    public DemoAdapter(List<String> strings) {
    
    
        mDemoList = strings;
    }

    /**
     *这个方法用于创建MyViewHolder实例,将子布局加载进来,返回MyViewHolder 实例
     */
    @Override
    public DemoAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    
    
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_demo, parent, false);//将子布局加载进来
        MyViewHolder viewHolder = new MyViewHolder(view);//创建myViewHolder实例,传入加载出的子布局
        return viewHolder;//返回MyViewHolder 实例
    }
    /**
     *这个方法用于对子项布局赋值,在每个子项被滚动到屏幕的时候执行
     */
    @Override
    public void onBindViewHolder(DemoAdapter.MyViewHolder holder, int position) {
    
    
        String strings = mDemoList.get(position);//通过position参数得到当前项的数据实例
        holder.textV.setText(strings);//设置数据到myViewHolder的控件中,这里只有TextView控件
    }

    /**
     *这个方法用于返回数据源的长度
     */
    @Override
    public int getItemCount() {
    
    
        return mDemoList.size();
    }
}

4.使用RecyclerView

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /*******************处理数据start*****************************/
        List<String> strings = new ArrayList<>();
       
        for (int i = 0; i < 200; i++) {
    
    
            String str = "这是RecyclerView的第" + i + "个条目itemView";
            strings.add(str);
        }
        /*******************处理数据end*****************************/
        RecyclerView recyclerView = findViewById(R.id.rv_recycler_view);//找到RecyclerView控件
        LinearLayoutManager linearLayout = new LinearLayoutManager(this);//创建布局管理器LinearLayoutManager
        recyclerView.setLayoutManager(linearLayout);//设置布局管理器到RecyclerView中
        DemoAdapter demoAdapter = new DemoAdapter(strings);//将数据传到DemoAdapter构造函数中
        recyclerView.setAdapter(demoAdapter);//设置适配器(建立数据和适配器之间的联系)
    }

猜你喜欢

转载自blog.csdn.net/weixin_55806809/article/details/121285200