【问题标题】:Items are hidden from RecyclerView after update till user scroll更新后项目在 RecyclerView 中隐藏,直到用户滚动
【发布时间】:2020-07-07 09:07:49
【问题描述】:

我有一个带有 RecyclerView 的片段 [DISPLAY SCREEN] 用户单击其中的项目后,应用程序打开屏幕 [EDIT SCREEN] 以允许用户编辑该项目。 当用户完成更新时,我关闭片段 [EDIT SCREEN] 并返回 [DISPLAY SCREEN] 并向 api 发出新请求以再次获取数据

我检查了更新方法的线程,它接受来自 api 的数据,线程是 ma​​in

  private fun updateScreen(data: List<GymPackage>) {
    "updateScreen size ${data.size} pageNumber $pageNumber , thread num ${Thread.currentThread().name}".log(mTag)

    if (pageNumber++ == 1)
        packagesAdapter.clear()

    packagesAdapter.append(data)

    ("updateScreen size ${data.size} pageNumber $pageNumber ,, adapter ${packagesAdapter.itemCount}, ${packagesAdapter.getItemViewType(0)}" +
            ",${(packagesRecyclerView.layoutManager as LinearLayoutManager).findFirstVisibleItemPosition()}").log(mTag)
    /**
     * after get first page sometimes items not being shown so scroll to first item
     */

    packagesRecyclerView.scrollBy(0 , 50)


    loadMore = data.size == pageSize
    packagesAdapter.loadingProgressBar = data.size == pageSize

    tvNoData?.visibility = (packagesAdapter.itemCount == 0).gotViewVisiblity(true)
}

输出:

前两行是 [DISPLAY SCREEN] 获取项目列表时,

  • 线程是主线程
  • RecyclerView 适配器内的 n 个项目 -> 5
  • 0 是 RecyclerView 中第一个可见项的索引

从 [EDIT SCREEN] 返回后的第二行

  • 线程是主线程
  • RecyclerView 适配器内的 n 个项目 -> 5
  • -1 是 RecyclerView 中第一个可见项目的索引 --> 所以用户看不到任何项目

当用户滚动时,他会正常看到项目。

我试图让 rv 滚动使用

packagesRecyclerView.scrollBy(0 , 50)

还有

packagesRecyclerView.scrollToPosition(0)

都没有结果

更新 1

试过这些

  • packagesAdapter.notifyDataSetChanged()
  • packagesRecyclerView.performClick()

没有结果

更新 2

对于 beta7,谷歌表示它提供了修复

  • MotionLayout 中的嵌套滚动视图问题
  • MotionLayout 的过渡侦听器问题
  • MotionLayout 中的内存泄漏
  • Recycler查看性能
  • 群组可见性
  • 填充问题

在我将 lib 更新为之后,应用可以正常工作,但运动还有其他填充问题

 implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta7'

【问题讨论】:

  • 那么,上面提到的问题通过更新到beta7 解决了,但是你有新的错误?
  • 是的,但运动在某些项目的填充方面存在一些问题
  • 如果你认为它的运动相关,你可以尝试其他版本。 beta7 导致我的应用程序崩溃,beta6 有一些转换错误,所以我目前坐在 beta4

标签: android android-recyclerview android-constraintlayout


【解决方案1】:

返回 beta4

implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4'

并使用

   motion.transitionToStart()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    相关资源
    最近更新 更多