如果列表中的某个item数据发生微小变化而需要更新UI状态,直接notifyDataSetChanged()的方式会影响性能,今天看到Android官方的列表局部更新方式,分享给大家:

    void onNewDataArrived(List news) {        List oldNews = myAdapter.getItems();        DiffResult result = DiffUtil.calculateDiff(new MyCallback(oldNews, news));        myAdapter.setNews(news);        result.dispatchUpdatesTo(myAdapter);    }    //只需将您的 MyCallback 定义为 DiffUtil.Callback 实现,以通知 DiffUtil 如何检查您的列表即可。
另外还有RecyclerView的嵌套问题,也有详细的解释

RecyclerView:嵌套的 RecyclerView

嵌套 RecyclerView 很常见,对于由水平滚动列表组成的纵向列表(例如 Play 商店主页面上的应用网格),尤其如此。这种方法效果很好,但它也会导致大量来回移动的视图。在首次向下滚动页面时,如果您看到大量内部内容出现扩充,则可能需要检查内部(水平)RecyclerView 之间是否正在共享 RecyclerView.RecycledViewPool。默认情况下,每个 RecyclerView 都将有自己的内容池。然而,在屏幕上同时显示十几个 itemViews 的情况下,如果所有行都显示类型相似的视图,那么当不同的水平列表无法共享 itemViews 时,就会出现问题。

KOTLINJAVA

    class OuterAdapter extends RecyclerView.Adapter {        RecyclerView.RecycledViewPool sharedPool = new RecyclerView.RecycledViewPool();        ...        @Override        public void onCreateViewHolder(ViewGroup parent, int viewType) {            // inflate inner item, find innerRecyclerView by ID…            LinearLayoutManager innerLLM = new LinearLayoutManager(parent.getContext(),                    LinearLayoutManager.HORIZONTAL);            innerRv.setLayoutManager(innerLLM);            innerRv.setRecycledViewPool(sharedPool);            return new OuterAdapter.ViewHolder(innerRv);        }        ...    

 

如果您希望进一步优化,还可以对内部 RecyclerView 的 LinearLayoutManager 调用 setInitialPrefetchItemCount(int)。例如,如果您始终在某行中显示 3.5 项内容,请调用 innerLLM.setInitialItemPrefetchCount(4);。这将向 RecyclerView 表明,当某个水平行即将显示在屏幕上时,如果界面线程中有空余时间,RecyclerView 应尝试预取该行中的内容。

更多相关文章

  1. ExpandableListView二级列表
  2. 2010.11.15———android spinner下拉列表
  3. [android]在上下文菜单的选中事件中获取列表选中的元素
  4. 2010.11.15———android spinner下拉列表
  5. Android基于基于布局嵌套的页面导航实现
  6. Android(安卓)列表数据写入到本地Excel文件(包括图片)
  7. Python list sort方法的具体使用
  8. [android]在上下文菜单的选中事件中获取列表选中的元素
  9. android开发 列表显示(ListView)

随机推荐

  1. Android图像篇
  2. Flash 之ANE的applicationDeployment.nat
  3. 开发Android应用 提升性能的小技巧
  4. Android Button应用法则
  5. 使用Android Studio 创建第一个Android
  6. 如何在Android和iOS设备上录制游戏?
  7. Android命令Monkey压力测试,详解
  8. android全平台编译ffmpeg合并为单个库实
  9. 修改版本号
  10. 让Python程序在Android手机上跑起来