RecyclerView源码学习笔记(二)setAdapter

引言

上篇文章RecyclerView源码学习笔记(一)构造函数和setLayoutManager方法主要学习了RecyclerView初始化和setLayoutManager方法的源码,这篇我们学习setAdapter方法的源码

内容

setAdapter方法

按照我们平时最简单的使用习惯,在调用完setLayoutManager方法之后就要调用setAdapter方法了,直接贴源码

    /**
     * Set a new adapter to provide child views on demand.
     * <p>
     * When adapter is changed, all existing views are recycled back to the pool. If the pool has
     * only one adapter, it will be cleared.
     *
     * @param adapter The new adapter to set, or null to set no adapter.
     * @see #swapAdapter(Adapter, boolean)
     */
    public void setAdapter(@Nullable Adapter adapter) {
        // bail out if layout is frozen
        setLayoutFrozen(false);
        setAdapterInternal(adapter, false, true);
        processDataSetCompletelyChanged(false);
        requestLayout();
    }

代码不多,从注释来看这个方法的作用是

  • 设置一个新的Adapter
  • 所有已经存在的view将会被回收到pool中,如果pool只有一个adapter,那么这个pool将会被清空

上面提到的pool就是在前一篇RecyclerView源码学习笔记(一)构造函数和setLayoutManager方法中说的RecycledViewPool。
接下来一行一行看下去。第一行是调用了setLayoutFrozen(false),这个方法的作用是什么呢?从注释来看可以将此方法归纳为以下几点:

  • 决定RecyclerView是否可以进行layout和scroll,如果参数是true,相当于这个RecyclerView被冻住了,那么layout的请求将被推迟,直到调用setLayoutFrozen(false)
  • 当RecyclerView被冻住的时候,RecyclerView的smoothScrollByscrollByscrollToPositionsmoothScrollToPosition这些方法的调用将直接被丢弃,也就是直接返回,这个我们可以看一下scrollBy的源码,当判断到mLayoutFrozen等于true的时候就直接返回了,而这个mLayoutFrozen就是在setLayoutFrozen方法中被赋值的。
    public void smoothScrollBy(@Px int dx, @Px int dy, @Nullable Interpolator interpolator) {
        if (mLayout == null) {
            Log.e(TAG, "Cannot smooth scroll without a LayoutManager set. "
                    + "Call setL
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`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 显示最新的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值