使用 Java 在 Android 中实现 RecyclerView

本文详细介绍了如何在Android应用中实现RecyclerView,包括将其添加到XML布局、创建单独的项目视图、定义ViewHolder、创建Adapter以及实例化RecyclerView。通过五个步骤,读者将了解如何有效地显示大量数据并实现高效的列表滚动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

这个系列将是我放置所有 Android 笔记的地方。当我学习有关 Android 开发的新知识时,我将在本篇文章中介绍

什么是 RecyclerView ?

好吧,本质上,RecyclerView 使得显示大量数据变得简单高效。我们提供数据并定义每个单独项目的外观,RecyclerView 库在需要时动态创建元素

实现 RecyclerView 的步骤

实现 RecyclerView 可能会让人感到困惑,所以为了让这更容易,我将事情分解为 5 个简单的步骤:
1) 将 RecyclerView 添加到 XML 文件

2) 创建单独的 RecyclerView 项目 XML 文件

3) 创建 ViewHolder

4) 创建适配器

5) 实例化 RecyclerView

如果您不确定 ViewHolder 或 Adapter 是什么,请不要担心,我们稍后会详细讨论它们

  1. 将 RecyclerView 添加到 XML 文件
  • 所以这部分部分可能会有些混乱,主要是因为调用了库RecyclerView名,类名也是RecyclerView. 所以除非我特别声明我们在谈论图书馆,否则总是假设我们在谈论类。现在将 RecyclerView 类添加到任何 XML 文件中:
<androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
         />

layout和取决于个人开发者widthid只要确保您使用的是正确的 RecyclerView 类。

  1. 创建单独的 RecyclerView 项目 XML 文件
  • 众所周知,RecyclerView 用于显示大量数据,既简单又高效。其中一个步骤是定义各个元素的外观。我们通过定义一个新的 XML 文件来做到这一点,当然样式取决于您。但是,我强烈建议使用 Android 提供的CardView:
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp">
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="8dp">
        <TextView
            android:id="@+id/text_view_priority"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_marginEnd="154dp"
            android:text="This will get replaced by later" />
    </RelativeLayout>
</androidx.cardview.widget.CardView>

确保layout_heightCardView 的设置为wrap_content,否则您将获得非常大的 CardView。

另外,请特别注意android:id=“@+id/text_view_priority”,我们稍后将使用该 id

  1. 创建 ViewHolder
  • ViewHolder 描述了一个项目视图和关于它在 RecyclerView 中的位置的元数据。长话短说,这个类将代表 RecyclerView 中的单个项目。我想指出,官方教程HERE(以及本教程)已将 ViewHolder 类设为静态并嵌套在 Adapter 类中。这不是必须的,只是为了便于使用。自定义 ViewHolder 的唯一限制是它扩展了RecyclerView.ViewHolder类。所以你可以像这样创建一个 ViewHolder 类:
public static class ViewHolder extends RecyclerView.ViewHolder{
        private  TextView textView;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            //Define click listener for the ViewHolder's View
            this.textView =  (TextView) itemView.findViewById(R.id.text_view_priority);

        }

        //GETTERS
        public TextView getTextView() {
            return textView;
        }
        //SETTERS
        public void setTextView(TextView textView) {
            this.textView = textView;
        }
    }

注意TextView以及我们如何通过 找到它的值 R.id.text_view_priority。R.id.text_view_priority是来自第 2 步的 TextView 的 id。我们在此类中找到视图,以便Adapter(下一步)将数据绑定到它们

  1. 创建适配器
  • 适配器提供从特定于应用程序的数据集到在 RecyclerView 中显示的视图的绑定。Adapter 将与 ViewHolder 一起工作以创建单独的视图并将数据绑定到这些视图。适配器通过 3 种特定方法执行此操作:

1、onCreateViewHolder() : RecyclerView(库而不是类)在需要创建新的ViewHolder时调用此方法。该方法创建并初始化 ViewHolder 及其关联的 View,但不填充 View 的内容。因此,此方法的唯一目的是从第 3 步创建自定义 ViewHolder 的新实例。

@Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        //Create a new view, which defines the Ui of the list item
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.indiv_recycler_item,parent,false);
        return new ViewHolder(view);
    }

如果LayoutInflater代码混淆,请不要担心。LayoutInflater的唯一工作是将 XML 代码转换为我们的代码可以与之交互的 View 对象。简单的R.layout.indiv_recycler_item意思是它正在使用 res.layout 文件夹中的 XML 文件,并且该 XML 文件被称为indiv_recycler_item. 文件名应该是包含步骤 2 内容的文件名。

2、 onBindViewHolder() : RecyclerView 库调用此方法将 ViewHolder 与数据相关联。该方法获取适当的数据以填充 ViewHolder 的布局。

@Override 
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.getTextView().setText(localDataSet[position]);
    }
  • 该holder对象实际上是从onCreateViewHolder()方法返回的实例化的 ViewHolder 对象。我唯一没有解释的是localDataSet,我稍后会展示。现在它只是一个简单的数组,在 Adapter 类的任何地方,以后我将展示如何从数据库中获取数据。

3、getItemCount() : RecyclerView 库调用该方法获取数据集的大小。非常简单直接的方法:

  @Override
    public int getItemCount() {
        return localDataSet.length;
    }
  • 所以适配器类看起来像这样:
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
    private String [] localDataSet =   {"it","do","be","like","that","sometimes"};



    public static class ViewHolder extends RecyclerView.ViewHolder{
        private  TextView textView;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            this.textView =  (TextView) itemView.findViewById(R.id.text_view_priority);

        }

        //GETTERS
        public TextView getTextView() {
            return textView;
        }
        //SETTERS
        public void setTextView(TextView textView) {
            this.textView = textView;
        }
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        //Create a new view, which defines the Ui of the list item
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.indiv_recycler_item,parent,false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.getTextView().setText(localDataSet[position]);

    }

    @Override
    public int getItemCount() {
        return localDataSet.length;
    }
}
  1. 实例化 RecyclerView

在这最后一步中,我们要做 3 件事,1)找到 RecyclerView,2)设置 Adapter,3)设置布局管理器。我们唯一没有谈论的是LayoutManager所以让我们这样做。

  • LayoutManager :布局管理器实际上是整个 RecyclerView 库的 MVP。它决定了 RecyclerView 的外观,如果它是一个网格或列表。它还确定哪些项目在屏幕上不再可见以及如何重用视图。

我们决定实现一个LinearLayoutManager,这意味着我们的 RecyclerView 将看起来像单独的列表项。

public class RecyclerViewFragment extends Fragment {
    private RecyclerView recyclerView;


    public RecyclerViewFragment(){
        super(R.layout.recycler_view_fragment);
    }

    @Override
    public void onViewCreated(View view,Bundle savedInstanceState){
        recyclerView = view.findViewById(R.id.recyclerview);
        this.recyclerView.setAdapter(new CustomAdapter());
        this.recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));


    }


}

如您所见,上面的代码用于片段内部,特别是名为R.layout.recycler_view_fragment.但是,RecylerView 也可以在 Activity 中,因此您可以决定使用哪一个。

至此,我们已经在 Android 中成功实现了一个简单的 RecyclerView

结论

感谢您抽出时间阅读我的这篇博文。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值