You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android RecyclerView不自动更新,仅滚动时生效的问题求助

解决RecyclerView调用notifyItemChanged后仅滚动才刷新的问题

1. 修复线程错误(核心问题)

你在IO协程里调用RecyclerView的通知方法是错误的——所有UI相关操作必须在主线程执行。修改updateImage方法:

private fun updateImage(moviePosition: Int) {
    CoroutineScope(Dispatchers.IO).launch {
        Log.e("a7a", "called")
        try {
            SharedVars.allMoviesLoaded = movies
            // 切回主线程执行UI更新
            withContext(Dispatchers.Main) {
                binding?.rvMoviesToDelete?.adapter?.notifyItemChanged(moviePosition)
            }
        } catch (e: Exception) {
            handleLoadingErrors("updateImg", "$e")
        }
    }
}

2. 确认数据源与适配器同步

  • 检查你更新的movies集合,和适配器初始化时用的tempArrayList是否为同一个引用。如果是不同集合,要么将movies赋值给适配器内部的数据源,要么调用adapter.submitList(movies)(若使用ListAdapter)。
  • 适配器的onBindViewHolder方法中,必须直接从当前数据源读取最新图片信息,不能依赖缓存的旧值。

3. 解决ScrollView嵌套RecyclerView的布局冲突

ScrollView嵌套RecyclerView会干扰RecyclerView的布局刷新机制,建议:

  • 将ScrollView替换为NestedScrollView,同时给RecyclerView添加以下属性:
<androidx.recyclerview.widget.RecyclerView
    ...
    android:nestedScrollingEnabled="false"
    android:layout_height="wrap_content"/>
  • 或者给RecyclerView设置固定高度,避免ScrollView影响其视图更新逻辑。

4. 确保图片加载完成后再触发更新

如果使用Glide/Picasso等库加载Firebase Storage图片,要在图片加载完成的回调中调用updateImage,而非提前触发。以Glide为例:

Glide.with(context)
    .load(imageUrl)
    .listener(object : RequestListener<Drawable> {
        override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean {
            return false
        }

        override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
            // 图片加载完成后更新RecyclerView
            updateImage(position)
            return false
        }
    })
    .into(imageView)

内容的提问来源于stack exchange,提问作者Mark George

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:01:14