【问题标题】:RecyclerView with RoomDatabase an ViewModel带有 RoomDatabase 和 ViewModel 的 RecyclerView
【发布时间】:2021-01-12 19:48:13
【问题描述】:

我正在这样显示我的回收站视图:

   parrafoLeyViewModel.allParrafosLey.observe(this, Observer {  

    recyclerview_lectura_ley.layoutManager = LinearLayoutManager(this)
    adapterListar = AdapterListarLey(this, it, this)
    recyclerview_lectura_ley.adapter = adapterListar

   })

因此,当我将数据插入 RoomDatabase 时,我的 recyclerview 会重新启动并返回开始

    GlobalScope.launch {
                    db.parrafoLeyDao().updateComentarioLey(
                        ComentarioLey(
                            idParrfo,
                            spTipoComentario.selectedItem.toString(),
                            etInserteComentario.text.toString()
                        )
                    )
                }

我想要的是,当我插入数据时,它会保持在相同的位置。我正在使用 ViewModel

【问题讨论】:

  • 你在哪里更新recyclerview的数据?
  • 我在数据库中插入数据,recyclerview 中的每个项目都允许我为这些项目中的每一个插入特定的数据
  • 对于每个 recyclerview 项目,我在数据库中插入一条评论,但是当我插入它时,recyclerview 移动到开头
  • cmets 在 recyclerview 中不可见,它们仅插入 bd 中,没有其他内容

标签: android kotlin android-recyclerview android-room android-viewmodel


【解决方案1】:

您没有正确地将数据传递给Recycler View

请确保您的 数据源 包含在 Live Data 中 然后将此实时数据传递给您的 Recycler View Adapter。

这样Recycler View 只会重新绘制更改的项目,而不是整个列表。因为 Recycler View 可以很好地处理实时数据。

Recycler View 中任何会导致列表重新绘制的方法都应该被排除。 例如notifyDataSetChanged() 方法。

改为致电submitList()

最后请阅读以下文档:

  1. Recycler View Sample

  2. RecyclerView.State

【讨论】:

    猜你喜欢
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多