在notifyDatasetChanged()后RecyclerView闪烁

2024-03-27

我有一个 RecyclerView,它从 API 加载一些数据,包括图像 url 和一些数据,我使用 networkImageView 来延迟加载图像。

@Override
public void onResponse(List<Item> response) {
   mItems.clear();
   for (Item item : response) {
      mItems.add(item);
   }
   mAdapter.notifyDataSetChanged();
   mSwipeRefreshLayout.setRefreshing(false);
}

这是适配器的实现:

public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) {
        if (isHeader(position)) {
            return;
        }
        // - get element from your dataset at this position
        // - replace the contents of the view with that element
        MyViewHolder holder = (MyViewHolder) viewHolder;
        final Item item = mItems.get(position - 1); // Subtract 1 for header
        holder.title.setText(item.getTitle());
        holder.image.setImageUrl(item.getImg_url(), VolleyClient.getInstance(mCtx).getImageLoader());
        holder.image.setErrorImageResId(android.R.drawable.ic_dialog_alert);
        holder.origin.setText(item.getOrigin());
    }

问题是,当我们在 recyclerView 中刷新时,它会在开始时闪烁很短一段时间,这看起来很奇怪。

我只是使用 GridView/ListView 来代替,它按我的预期工作。没有眨眼。

RecycleView 的配置onViewCreated of my Fragment:

mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
        // use this setting to improve performance if you know that changes
        // in content do not change the layout size of the RecyclerView
        mRecyclerView.setHasFixedSize(true);

        mGridLayoutManager = (GridLayoutManager) mRecyclerView.getLayoutManager();
        mGridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                return mAdapter.isHeader(position) ? mGridLayoutManager.getSpanCount() : 1;
            }
        });

        mRecyclerView.setAdapter(mAdapter);

有人遇到过这样的问题吗?可能是什么原因?


尝试在 RecyclerView.Adapter 中使用稳定的 ID

setHasStableIds(true)并覆盖getItemId(int position).

没有稳定的ID,之后notifyDataSetChanged(),ViewHolder 通常分配到不同的位置。这就是我眨眼的原因。

你可以找到一个这里有很好的解释。 https://medium.com/@hanru.yeh/recyclerviews-views-are-blinking-when-notifydatasetchanged-c7b76d5149a2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在notifyDatasetChanged()后RecyclerView闪烁 的相关文章

  • 如何将值从 android 传递到 php Web 服务并检索它?

    我正在尝试将一个值传递给我的 php web 服务 我已经使用此代码来传递 名称 值 private class MyAsyncTask extends AsyncTask
  • 尽管已被销毁,但多次打开子活动仍会导致 InstanceCountViolation

    我正在开发一个具有较低级别活动的项目 称为RecordView显示记录详细信息 例如图像 拍摄日期和时间以及纬度 经度信息 我不是尝试操纵相机进行地理标记并访问 exif 数据 而是尝试实现一个位置侦听器来获取首次拍摄图像的位置 按下按钮时
  • 无法再转换为 LayerDrawable(升级 v7 后)

    我正在使用支持库的最新版本 22 1 1 我曾经这样去 mRatingBar RatingBar getActivity findViewById R id rating LayerDrawable layer LayerDrawable
  • Mediaplayer 播放几次后停止播放

    我有一个按钮 按下它会播放一个随机声音剪辑 然后播放另一个声音剪辑 然后通过一个媒体播放器播放另一个声音剪辑 但是多次按下该按钮 15 20 次 后 所有音频都会停止 我在播放最后一个音频剪辑后释放媒体播放器 所以我不认为这是原因 有什么指
  • 如何在android中以编程方式自动执行触摸

    我有一个RelativeLayout我想在不触摸屏幕的情况下执行触摸事件想要给出Toast如果它确实被触摸或没有被触摸 请抛出消息 我已经尝试过下面的方法 但它似乎不起作用 MotionEvent event MotionEvent obt
  • 我从 String placeName = placeText.getText().toString(); 收到空指针异常

    您好 想从编辑文本中获取地名并在地图上标记 这是我的代码 其中出现空指针异常 请帮助我应该做什么以及哪里出错了 因为我从对话框中的编辑文本字段获取地名 View layout View inflate this R layout alert
  • 带有 ListTiles 和按钮行的 Flutter 下拉菜单

    我正在尝试构建一个自定义下拉菜单 如下所示 我已经成功地实现了ListTiles and Row of Buttons没有下拉菜单 但我不确定如何将所有内容嵌套在下拉菜单类中 这是我到目前为止所得到的 class HomePage exte
  • 为什么抽屉布局中的视图强制缩放以填充屏幕

    这是我的测试代码
  • 片段开始时显示用于编辑文本的键盘

    当我的片段开始时 我希望我的编辑文本成为焦点 让用户开始输入内容 我可以使用 requestFocus 将其聚焦 但无法显示键盘 我已经尝试过这两种方法 edit EditText view findViewById R id search
  • 如何在android 4.2中显示选项菜单

    我正在尝试在我的测试应用程序中创建菜单选项 当我将清单中的主题设置为默认时 我可以看到菜单 菜单显示在顶部 如果我将清单中的主题设置为 NoTitleBar 我看不到菜单选项 我想在清单中设置主题 NoTitleBar 时获取菜单 如何修复
  • Android 拖放 ACTION_DRAG_ENDED 未触发

    我真的很花时间解决这个问题 到目前为止找不到任何有相关经验的朋友 这是我发布第一个应用程序之前的最后一个功能 所以在结局即将到来的情况下陷入困境让我发疯 如果我将对象放在可接受的区域中 我的拖放效果会非常好 但是 如果拖放到其他地方 我不会
  • 如何修复第三方 SDK 中重复的 libgnustl_shared.so 文件?

    当我使用 gradle 构建并运行 apk 时 出现以下错误 Error Execution failed for task app transformNative libsWithMergeJniLibsForDebug gt com a
  • MediaStyle 通知未响应 RemoteControl 事件。

    我们正在将正在进行的播放通知迁移到 Lollipop 中引入的 MediaStyle 通知 RemoteControlClient 似乎已被弃用 并且 MediaStyle 通知不处理媒体按钮事件 例如通过耳机远程暂停 播放 有人得到这个工
  • 如何模糊视图

    I have a view having different colors I need to blur the background of that view for example There is LinearLayout in wh
  • 直接在应用程序中评价 Google Play 应用程序 [重复]

    这个问题在这里已经有答案了 我需要在我的 Android 应用程序中设置费率选项 我找到了这个link http www androidsnippets com prompt engaged users to rate your app i
  • 如何修补更新 Android Studio (0.80 -> 0.81)?

    我安装了 Android Studio Beta v0 8 0 并下载了 v0 8 1 因为 IDE 不会自动下载 v0 80 并使用新版本修补 Android Studio 的预览系列自动做到了这一点 从他们的网页 http tools
  • 如何在按下硬件主页按钮时关闭所有活动?

    我有一个应用程序 其中有 5 个活动 一个菜单活动和另外 4 个子活动附加到菜单屏幕 所以我可以选择任何活动 然后返回菜单 假设我像这样四处走动 菜单 gt 活动 1 gt 菜单 gt 活动 3 gt 活动 2 gt 菜单 现在我按 主页
  • 如何使用 javascript 迭代文件系统目录和文件?

    我正在使用 Javascript 编写一个应用程序 该应用程序将与 Phonegap 一起使用来制作 Android 应用程序 我正在使用 Phonegap File API 来读取目录和文件 相关代码如下所示 document addEv
  • 加载 highchart 时 Android 错误膨胀类

    我正在尝试加载highcharts via Dialog 下面是我的代码 Gradle implementation com highsoft highcharts highcharts 9 0 1 XML
  • 在edittext android中插入imageview

    我想将 imageview 放在 edittext 中 可能吗 我检查了 evernote 应用程序 它能够将照片放在编辑文本部分 我想让我的应用程序完全相同 我如何才能将从图库中选择的图像视图放入编辑文本中 我首先尝试将 imagevie

随机推荐