首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当RecylerView中的所有onCreateViewHolder都完成时通知

在RecyclerView中,当所有的onCreateViewHolder方法都完成时,可以通过以下方式通知:

  1. 使用接口回调:在RecyclerView的适配器中定义一个接口,例如OnAllViewCreatedListener,该接口包含一个方法onAllViewCreated()。在每个onCreateViewHolder方法中,当ViewHolder创建完成后,调用该接口的方法。在Activity或Fragment中实现该接口,并在onAllViewCreated()方法中执行相应的操作。
代码语言:txt
复制
public interface OnAllViewCreatedListener {
    void onAllViewCreated();
}

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private OnAllViewCreatedListener mListener;

    public MyAdapter(OnAllViewCreatedListener listener) {
        mListener = listener;
    }

    // ...

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // 创建ViewHolder
        ViewHolder viewHolder = new ViewHolder(...);
        // 其他操作
        // ...

        // 当ViewHolder创建完成时,通知接口
        if (mListener != null && getItemCount() == viewHolderCount) {
            mListener.onAllViewCreated();
        }

        return viewHolder;
    }
}

public class MainActivity extends AppCompatActivity implements OnAllViewCreatedListener {
    // ...

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

        RecyclerView recyclerView = findViewById(R.id.recyclerView);
        // 创建适配器,并传入接口实例
        MyAdapter adapter = new MyAdapter(this);
        recyclerView.setAdapter(adapter);
        // 设置布局管理器等
        // ...
    }

    @Override
    public void onAllViewCreated() {
        // 所有ViewHolder都创建完成时的操作
        // ...
    }
}
  1. 使用观察者模式:定义一个观察者类,例如AllViewCreatedObserver,该类包含一个方法onAllViewCreated()。在RecyclerView的适配器中添加一个观察者列表,并提供注册和注销观察者的方法。在每个onCreateViewHolder方法中,当ViewHolder创建完成后,遍历观察者列表,调用每个观察者的onAllViewCreated()方法。
代码语言:txt
复制
public interface AllViewCreatedObserver {
    void onAllViewCreated();
}

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private List<AllViewCreatedObserver> mObservers = new ArrayList<>();

    public void registerObserver(AllViewCreatedObserver observer) {
        mObservers.add(observer);
    }

    public void unregisterObserver(AllViewCreatedObserver observer) {
        mObservers.remove(observer);
    }

    // ...

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // 创建ViewHolder
        ViewHolder viewHolder = new ViewHolder(...);
        // 其他操作
        // ...

        // 当ViewHolder创建完成时,通知观察者
        if (getItemCount() == viewHolderCount) {
            for (AllViewCreatedObserver observer : mObservers) {
                observer.onAllViewCreated();
            }
        }

        return viewHolder;
    }
}

public class MainActivity extends AppCompatActivity implements AllViewCreatedObserver {
    // ...

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

        RecyclerView recyclerView = findViewById(R.id.recyclerView);
        // 创建适配器
        MyAdapter adapter = new MyAdapter();
        // 注册观察者
        adapter.registerObserver(this);
        recyclerView.setAdapter(adapter);
        // 设置布局管理器等
        // ...
    }

    @Override
    public void onAllViewCreated() {
        // 所有ViewHolder都创建完成时的操作
        // ...
    }
}

以上是两种常见的通知所有onCreateViewHolder方法都完成的方式,可以根据具体需求选择适合的方法。在实际开发中,可以根据业务逻辑进行相应的处理,例如加载数据、显示界面等。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

一篇博客理解Recyclerview使用

从Android 5.0开始,谷歌公司推出了RecylerView控件,看到RecylerView这个新控件时候,大部分人会首先发出一个疑问,recylerview是什么?...为什么会有recylerview也就是说recylerview优点是什么?recylerview怎么用?等等,下面我们将深入解析recylerview。 1.RecyclerView是什么?...,然后在onTouchEvent,监听ACTION_MOVE,用户手指滑动,不断把当前第一个View回调回去 关于为什么getChildAt(0)和getChildPosition()可用,起初我以为有...,就是我们在适配器绑定ViewHolder方法需要重新给我们itemView布局设置height,这里是生成随机数来设置高度。...@Override // 填充onCreateViewHolder方法返回holder控件 public void onBindViewHolder(final MyHolder holder

63530

Android5.0 新特性

支持64位虚拟机 放弃了之前使用Dalivk虚拟机,改用了Art虚拟机,实现真正跨平台编译,在不同机器平台上出现 多任务窗口OverView 每个App都是一个独立的卡片 设备识别解锁 特定设备在...Android设备附近,绕过锁屏界面直接解锁 RecylerView出现替代ListView RecylerView具有高度解耦,异常灵活性和更高效率,可支持设置不同布局管理器LayoutManager...,条目间隔线ItemDecoration,ItemAnimator实现不同效果 CardView卡片布局出现 可设置卡片圆角半径,阴影半径 三种通知 普通通知 折叠通知 在普通通知基础上加入了自定义布局通过设置...builderbigContentView属性 由于布局是在App进程,而通知明显不是App进程因此需要使用RemoteView封装自定义视图 悬浮通知 通知出现时会在屏幕上悬浮一段时间后自动消失...实现提取颜色非常简单 创建一个Bitmap,将该Bitmap给到Palette.form参数,调用generate传入一个回调,通过回调palette获取getRgb即可拿到颜色

63830

RecyclerView+CardView实现横向卡片式滑动效果

3.如何使用RecylerView和CardView在android studio 在build.gradle添加依赖再编辑即可 compile 'com.android.support:recyclerview-v7...我们会发现使用了CardView控件以及在控件添加简易两个TextView 现在来介绍CardView一些常用属性,这也是现在卡片效果关键所在 card_view:contentPadding...来实现RecyclerView 跟ListView一样,我们需要写一个适配器,代码如下: public class recyclerViewadapter extends RecyclerView.Adapter...onBindViewHolder() getItemCount() 和 OncreateViewHolder() OncreateViewHolder(): 创建新View,被LayoutManager...所调用 OnBindViewHolder():将数据与界面进行绑定 getItemCount() :返回数据数量 在Activity,代码如下: public class Frament1 extends

2.9K20

Adapter分组封装

可以完成强大group+children类型业务需求。...(1,2,10); //通知一组里所有子项插入 mAdapter.notifyChildrenInserted(1); //通知多组数据插入 mAdapter.notifyGroupRangeInserted...不利于维护,这点应该是上一点延伸,随着列表布局类型增加与变更,getItemViewType、onCreateViewHolder、onBindViewHolder代码需要变更或增加,Adapter...4.5 构建封装adapter 核心目的就是三个 避免类类型检查与类型转型 增强Adapter扩展性 增强Adapter可维护性 列表类型增加或减少时Adapter主要改动就是getItemViewType...避免索引越界异常,不要throw异常 //即使 position == getItemCount() 为true,可以用空页面替代 return TYPE_NO; //throw

1.8K00

IM开发干货分享:万字长文,详解IM“消息“列表卡顿优化实践

硬件加速开启后还会将主线程渲染工作交给单独渲染线程(RenderThread),这样主线程将内容同步到 RenderThread 后,主线程就可以释放出来进行其他工作,渲染线程完成接下来工作。...我们还发现每次进入“消息”列表需要从数据库获取“消息”列表数据,加载更多时也会从数据库读取会话数据。...执行 onCreateViewHolder 直接从该类获取缓存 item,这样就可以减少 onCreateViewHolder 执行耗时。...我们使用是谷歌官方 AsyncLayoutInflater 来异步加载布局,该类会将布局加载完成以后回调通知我们。但是它一般用于 onCreate 方法。...如果要解决这个问题,那么我们需要在封装类中提供类类属性所有 set 方法,并且不提供类 get 方法,改动非常大。

1.6K20

从 Android 开发到读懂源码 第05期:Leanback 结构源码简析

ArrayObjectAdapter 作为行/列数据提供者 (ListRow),缓存每行/列每个子 Item 数据 // ArrayObjectAdapter 作为 ItemBridgeAdapter...get(...) ... } // ArrayObjectAdapter 作为行/列数据提供者,缓存每行/列视图数据提供者...并且将 ViewType 用 presenter 在缓存池中索引与之对应起来,方便后面 onCreateViewHolder 获取。...// 这个 adapter 包含了该行中所有子 Item 数据 private final ObjectAdapter mAdapter; // 行标题文字,对应父类 Row HeaderItem...,让每个有不同样式 CustomPresenter 自身去实现具体视图和数据行为,这样需要增加新样式和数据,只需要往桥接类添加对应 Presenter 实现即可(往 ArrayObjectAdapter

2.1K71

Android用RecyclerView实现动态添加本地图片

imageUrls; private ImageFetcher imageFetcher; private ViewHolder viewHolder; private View view; /** * 在构造方法传入图片地址数据...context); imageFetcher.setImageCache(ImageCache.getInstance(context)); } @Override public ViewHolder onCreateViewHolder...imageUrls.get(position).equals("hehe")) { holder.imageViewBig.setBackgroundResource(R.mipmap.add); //图片是添加按钮时候隐藏删除按钮...,就是在存储图片list最后一项添加一个具有不同标识数据,点击对应标识和该标识一致,则添加,反之为修改。...使用recylerview可以直接更新有变化子项,而不用更新全部子项,用户体验更好,性能也提高了。 以上就是本文全部内容,希望对大家学习有所帮助。

1.7K20

优雅地实现RecyclerView上拉加载

RecylerView 上拉加载更多 上拉加载多状态 ---- 这篇博客是承接上一篇博客--探索Android架构DataLayer层(DataManager方式)具体实现,其实是上篇博客一个使用比较普遍例子...先谈谈思路,其实很简单,就是通过getItemViewType()加载不同布局,这里就是把加载更多布局封装进adapter。...接着上篇写数据加载接口来看,开始加载时候加入加载itemView,完成加载后去掉它。通过给RecyclerView添加滑动事件来判断加载时机。...} return TYPE_LOADING_MORE; } @Override public RecyclerView.ViewHolder onCreateViewHolder...onLoadMore(); } } public abstract void onLoadMore(); } 最后当然是在presenter或者activity如何使用

89940

使用 ConcatAdapter 顺序连接其他 Adapter

这方面的一个用例,是在列表头部和底部显示加载状态: 列表从网络检索数据,我们想显示一个加载图标;如果出现错误,我们要显示错误信息和重试按钮。...,它基于 LoadState 显示 1 或 0 个项目,每次 LoadState 有变动时候,我们会通知相应条目进行改动、插入或移除 (您可以在 拉取请求 查看相应代码)。...只要设置 isolateViewTypes = false,就可以让所有合并进来 Adapter 使用同一个视图池。...您复用 ViewHolder ,确保同一视图类型没有对应不同 ViewHodler!防止出现这个问题最佳实践之一,便是将布局 ID 作为视图类型返回。 <!...数据变更通知 ConcatAdapter 一个 Adapter 调用了通知函数,ConcatAdapter 会在更新 RecyclerView 之前计算新项目位置。

56120

AndroidTv Home界面实现原理(二)——Leanback 库主页卡位缩放动画源码解析

效果图.png 上一篇,我们留了问题,在 Tv Home 界面这种很常见聚焦卡位放大动画效果,我们这一篇就来看看 Leanback 库是怎么实现。...如果要我们自己实现的话,思路应该不难,就是写个放大、缩小动画,然后在卡位获得焦点应用放大动画,失去焦点应用缩小动画,所以关键点只是在于如何进行封装。...RowPresenter.onCreateVIewHolder.png onCreateViewHolder() 里代码我们不用去理解,当然你有时间有能力也可以,但现在主要是想搞懂它的卡位缩放动画实现...OnItemFocused.png 所以,在 ItemBridgeAdapter 里注册了焦点变化监听,焦点变化时,通知 mFcousHightlight 执行 onItemFocused() 方法...FocusHighlightHelper#setupBrowseItemFocusHighlight() -> ItemBridgeAdapter#setFocusHighlight() 简单点说就是,每一行

1.6K70

终于来了:Android端个人中心页面滑动冲突优化方案

问题现象 首页右滑可进入“个人中心”页面,然后在底部 RecylerView 上先左右滑动,但是不触发它们父布局 ViewPager 切换,然后手指不抬起,进行上下滑动,此时 RecylerView...整体滑动流程如图所示: image.png 手指触摸屏幕,记录位置,滑动后,判断是横向竖向,只判断一次 如果是上下滑动,则判断是触发最外层 LinearLayout 滑动,还是触发 RecyclerView...出现问题,用户手先触发左右滑动,这时候由于 RecyclerView 父布局 ViewPager 一些临界判断没被触发,所以没拦截事件,事件还是到了 RecyclerView ,此时如果再次上下滑动...2倍,进行拦截 我们需要把相关判断代码 copy 过来,然后加入到我们自定义 LinearLayout image.png image.png 此时进行 Log 调试发现还是有问题, 原来...下面看竖向 RecyclerView 拦截代码,非常简单: image.png 竖向可滑动并且差值 dy 大于临界值 mTouchSlop ,即响应事件。

97820

RecyclerView滑动卡顿怎么办?

大家好,我近期刚完成了一个商城类软件,首页就是用recyclerview多布局实现,近期优化让我不得不去深入了解一下recycleview这个控件。...getItemViewType(获取显示类型,返回值可在onCreateViewHolder拿到,以决定加载哪种ViewHolder) onCreateViewHolder(加载ViewHolder布局...(Item离开这个页面的时候调用) onViewRecycled(Item被回收时候调用) 2.复杂布局 好多文章都说过这个办法,的确是有效,但是这个效果也就因人而异吧,我只能说是缓解了一点点的卡顿...我们对于滚动过程,卡顿判断可以打开手机开发者选项:GPU呈现模式分析->在屏幕上显示为条形图。就可以非常直观看到滑动过程中有没有卡顿了。...从代码可以看到 主要就是对onScrollStateChanged方法进行监听,然后通知adapter是否加载图片或复杂布局。

3.1K20

Android开发笔记(一百二十二)循环器视图RecyclerView

下面看看强悍RecyclerView提供了哪些常用方法: setAdapter : 设置列表项适配器。有关适配器详细说明见下一标题。...onCreateViewHolder : 创建整个布局视图持有者。输入参数包括视图类型,可根据视图类型加载不同布局,从而实现带头部列表布局。...notifyItemChanged : 通知适配器在指定位置项目发生了变化。 notifyDataSetChanged : 通知适配器整个列表数据发生了变化。...,开发者可自定义头部类型与一般类型, //然后在onCreateViewHolder方法根据类型加载不同布局,从而实现带头部网格布局 return 0; } @Override...LinearLayoutManager 线性布局管理器LinearLayoutManager类似于LinearLayout,它是垂直方向布局,则展示效果类似于ListView;它是水平方向布局

2.4K20

再也不用担心面试官问RecycleView了

,包含数据和position信息,复用时必须是相同位置ViewHolder才能复用,应用场景在那些需要来回滑动列表往回滑动,能直接复用ViewHolder数据,不需要重新bindView。...所以「完整缓存流程」是: 保存缓存流程: 插入或是删除itemView,先把屏幕内ViewHolder保存至AttachedScrap 滑动屏幕时候,先消失itemview会保存到CacheView...然后新出现position=7数据通过postion在mCacheViews找不到对应ViewHolder,通过itemtype也在mRecyclerPool找不到对应数据,所以会调用onCreateViewHolder...,就通知父view不要拦截,拿起操作就设置可以拦截,正常走父view滑动。...也就是说它嵌套在NestedScrollView,默认会随着NestedScrollView滚动而滚动,放弃了自己滚动。所以给我们感觉就是滞留、卡顿。

1.4K20

RecyclerView使用详解(代替ListView)

方法,返回一个自定义ViewHolder(RecyclerView需要一个ViewHolder时会回调该方法,如果有可复用View不会回调) public MyViewHolder onCreateViewHolder...方法返回holder控件(一个View需要出现在屏幕上,该方法会被回调,我们需要再该方法根据数据来更改视图) public void onBindViewHolder(final MyViewHolder...,持有每个Item所有界面元素 public class MyViewHolder extends RecyclerView.ViewHolder{ public ImageView iv...() { @Override //RecyclerView滑动状态改变触发 public void onScrollStateChanged(RecyclerView recyclerView...//活动到最后一个条目加载更多数据 if ((visible + past) = total){ <span style="white-space:pre" </span /

1.3K20

爆表!RecyclerView性能提升200%,异步预加载大杀器!

不过说实在话,你既然有能力让设计师重新设计的话,还干个球开发啊,直接项目经理不香吗? 最后你可能会考虑不用xml写布局,改为使用代码自己一个一个new布局。...话说回来了,一个使用xml加载布局都要花上上百毫秒布局,可能xml快上千行下去了,你确定要自己一个一个new下去?...其本质就是开了一个长期等待异步线程,在子线程inflate view,然后把加载好view通过接口抛出去,完成view加载。...IAsyncInflater,下面就是来协调这两者进行合作,完成布局预加载和View读取。...本文全部源码我放在了github上, 感兴趣小伙伴可以下载下来研究和学习。

98630
领券