安卓RecyclerView和Adapter

关于RecyclerView

RecyclerView 是 Android 开发中一个非常重要的组件,用于在移动应用中实现滚动列表。它是一个更高效的列表视图,可以用来展示大量数据。Adapter 则用于将数据与 RecyclerView 的视图进行绑定,以在列表中展示数据。

RecyclerView是Android开发中的一种用于替代ListView的灵活组件,它在有限屏幕空间内展示大量数据方面更为优秀。

RecyclerView的工作原理与ListView类似,通过维护少量的视图并展示大量数据集。但是,RecyclerView通过以下两种方式简化了数据的展示和处理:

  1. 使用LayoutManager来确定每一个item的排列方式。LayoutManager可以设置线性布局、网格布局或者瀑布流布局等多种形式。
  2. 为增加和删除项目提供默认的动画效果,同时也可以自定义动画效果。

使用RecyclerView前,需要先设置一个继承自RecyclerView.Adapter的适配器,该适配器的作用是将数据与每一个item的界面进行绑定。另外,也可以设置一个ItemAnimator来为RecyclerView的Item提供动画效果。

关于Adapter--适配器的基类

适配器提供从应用程序特定数据集到RecyclerView中显示的视图的绑定。

类型参数:

<VH>–扩展适配器将使用的ViewHolder的类。

RecyclerView.Adapter是Android中用于处理数据适配和展示的一个类。它是一个抽象类,你需要继承这个类并实现其中的ViewHolder类来进行数据的适配和展示。

在实现RecyclerView.Adapter的时候,你需要重写其中的几个方法:

  1. onCreateViewHolder:这个方法是创建ViewHolder的时候调用的,在这个方法中,你可以为每个item布局创建对应的ViewHolder实例。
  2. onBindViewHolder:这个方法是绑定数据到ViewHolder的时候调用的,你可以在这个方法中将你的数据绑定到每个item的布局上。
  3. getItemCount:这个方法是返回你数据总量的时候调用的,在这个方法中,你需要返回你的数据的总数量。

总的来说,RecyclerView.Adapter是用来将数据和视图进行绑定的桥梁,它负责生成每一项的视图,并将视图和数据绑定在一起。

关于ViewHolder

ViewHolder描述了项目视图及其在RecyclerView中的位置元数据。

RecyclerView.Adapter实现应将ViewHolder子类化,并添加字段以缓存可能昂贵的View.findViewById(int)结果。

RecyclerView.LayoutParams属于RecyclerView.LayoutManager,而ViewHolders属于适配器。适配器应该可以随意使用自己的自定义ViewHolder实现来存储数据,从而使绑定视图内容变得更容易。实现应该假设单个项目视图将持有对ViewHolder对象的强引用,并且RecyclerView实例可能持有对额外屏幕外项目视图的强引用以用于缓存

依赖

在开始之前,需要在项目的 build.gradle 文件中添加 RecyclerView 的依赖项:

dependencies {
    //androidx以下
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    //或者androidx以上
    implementation 'androidx.recyclerview:recyclerview:1.2.1'
}

以下是如何创建一个简单的 RecyclerView 和自定义 Adapter 的基本步骤:

  1. 在布局文件中添加 RecyclerView
<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="vertical" />
  1. 创建一个布局文件,表示列表中的单个项目:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="8dp">

    <TextView
        android:id="@+id/item_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Sample Text" />
</LinearLayout>
  1. 创建一个自定义 Adapter 类,继承自 RecyclerView.Adapter 并实现相应的方法。这个类将负责将数据与列表项进行绑定:
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {

    private List<String> mData;
    private LayoutInflater mInflater;

    public CustomAdapter(Context context, List<String> data) {
        this.mInflater = LayoutInflater.from(context);
        this.mData = data;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = mInflater.inflate(R.layout.list_item, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        String item = mData.get(position);
        holder.itemText.setText(item);
    }

    @Override
    public int getItemCount() {
        return mData.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        TextView itemText;

        ViewHolder(View itemView) {
            super(itemView);
            itemText = itemView.findViewById(R.id.item_text);
        }
    }
}
  1. 在活动或片段中初始化 RecyclerViewAdapter,并将它们关联起来:
public class MainActivity extends AppCompatActivity {

    private RecyclerView mRecyclerView;
    private CustomAdapter mAdapter;
    private List<String> mData;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 初始化数据
        mData = new ArrayList<>();
        mData.add("Item 1");
        mData.add("Item 2");
        mData.add("Item 3");
        // ... 更多数据

        mRecyclerView = findViewById(R.id.recycler_view);
        mAdapter = new CustomAdapter(this, mData);

        // 设置布局管理器
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mRecyclerView.setLayoutManager(layoutManager );
        mRecyclerView.setAdapter(mAdapter);
    }
}

layoutManager.setOrientation(LinearLayoutManager.VERTICAL);这个方法是用来设置itemView在RecyclerView中的排布方向。

具体来说,这个方法可以用来设置RecyclerView的itemView是垂直排列还是水平排列。例如,如果你想让你的RecyclerView的itemView是垂直排列的,你可以调用layoutManager.setOrientation(LinearLayoutManager.VERTICAL)

相反,如果你想让你的RecyclerView的itemView是水平排列的,你可以调用layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL)

需要注意的是,这个设置会影响RecyclerView的itemView在屏幕上的排布方式,也会影响到RecyclerView的onMeasure()和onLayout()方法的行为。

setItemAnimator也可以用设置额外操作

RecyclerView没有直接添加分割线的属性,但是可以通过添加ItemDecoration来实现。

addItemDecoration增加两个条目之间的隔开样式

PS:

RecyclerView recyclerView = findViewById(R.id.recycler_view);  
recyclerView.addItemDecoration(new DividerItemDecoration(this));

这样,就成功地创建了一个简单的 RecyclerView 和自定义的 Adapter。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
`recyclerView.setAdapter(adapter)` 的含义是将一个适配器(Adapter)对象 `adapter` 设置给一个 RecyclerView(列表视图)对象 `recyclerView`。 在 Android 开发中,RecyclerView 是一个用于展示大量数据列表的高级视图组件。为了在 RecyclerView 中显示数据,需要使用适配器模式来提供数据和控制视图的显示。 `adapter` 是一个实现了 RecyclerView.Adapter 类的适配器对象,它负责将数据源与 RecyclerView 进行绑定,并根据数据源的变化来更新列表视图的显示。适配器通常会创建并管理列表项的视图,并根据数据的变化来刷新列表项的显示。 通过调用 `recyclerView.setAdapter(adapter)` 方法,将适配器对象 `adapter` 设置给 RecyclerView 对象 `recyclerView`,可以将适配器与 RecyclerView 进行关联。这样,RecyclerView 就能够通过适配器来获取数据,并使用适配器来管理列表项的显示。 以下是一个示例代码,展示如何使用 `recyclerView.setAdapter(adapter)` 方法将适配器设置给 RecyclerView: ```java RecyclerView recyclerView = findViewById(R.id.recyclerView); MyAdapter adapter = new MyAdapter(dataList); // dataList 是数据源 recyclerView.setAdapter(adapter); ``` 在上述示例中,首先获取到一个 RecyclerView 对象 `recyclerView`,然后创建一个适配器对象 `adapter`(这里假设是自定义的 `MyAdapter` 类),并将数据源 `dataList` 传递给适配器。最后,通过调用 `recyclerView.setAdapter(adapter)` 方法将适配器设置给 RecyclerView。 通过设置适配器,RecyclerView 将会使用适配器来获取数据并显示列表项视图。当数据源发生变化时,适配器会负责更新列表项的显示,以确保 RecyclerView 显示最新的数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会写代码的猴子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值