Android-RecyclerView

齐英朗
2023-12-01

一 前言

RecyclerView作为显示列表元素的控件,其功能十分强大,RecyclerView 库会根据需要动态创建元素。当列表项滚动出屏幕时,RecyclerView 不会销毁其视图。相反,RecyclerView 会对屏幕上滚动的新列表项重用该视图。这种重用可以显著提高性能,改善应用响应能力并降低功耗。

二 目录

  1. 使用步骤
    • 在布局中添加RecyclerView控件
    • 创建子元素显示的布局
    • 创建适配器
    • 在活动代码中进行控制

三 使用步骤

1. 在布局中添加RecyclerView控件

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

2.创建子元素显示的布局

在res目录下的layout目录中,创建recycler_chat.xml文件,其布局样式就是子元素所显示的样式。

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
   <TextView
       android:id="@+id/textView"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"/>
</FrameLayout>

3. 创建适配器

   public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
    private String[] localDataSet;
    public static class ViewHolder extends RecyclerView.ViewHolder {
        private final TextView textView;
        public ViewHolder(View view) {
            super(view);
            // Define click listener for the ViewHolder's View

            textView = (TextView) view.findViewById(R.id.textView);
        }

        public TextView getTextView() {
            return textView;
        }
    }

    public CustomAdapter(String[] dataSet) {
        localDataSet = dataSet;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        // Create a new view, which defines the UI of the list item
        View view = LayoutInflater.from(viewGroup.getContext())
        .inflate(R.layout.recycler_chat, viewGroup, false);

        return new ViewHolder(view);
    }
    @Override
    public void onBindViewHolder(ViewHolder viewHolder, final int position) {

        // Get element from your dataset at this position and replace the
        // contents of the view with that element
        viewHolder.getTextView().setText(localDataSet[position]);
    @Override
    public int getItemCount() {
        return localDataSet.length;
    }
    
}

4.在活动中进行代码控制

private RecyclerView recyclerView;
private MyAdapter myAdapter;

//实例化布局
recyclerView = findViewById(R.id.recycler);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
myAdapter = new MyAdapter(messageList);
recyclerView.setAdapter(myAdapter);
 类似资料: