当前位置: 首页 > 知识库问答 >
问题:

在房间中复制sqlite数据库后刷新回收器视图

柯默
2023-03-14

我正在使用房间数据库填充RecyclerView。在这些设置中,用户可以备份和恢复基础sqlite数据库。备份/恢复是一种简单的复制机制,如下所示。

我将数据库恢复到位置getDatabasePath(MyDatabase.DB_NAME),这完全正常。但是,如果用户退出设置活动,则不会刷新RecyclerView。

我想我必须告诉房间DB已经改变了。但我该怎么做呢?谢谢

共有2个答案

鲜于璞瑜
2023-03-14

您可以从Dao返回LiveData列表,比如LiveData

每当房间更改到LiveData

如果有大量数据,也可以使用DiffUtil,这样当调用notifyDataSetChanged()时,只有更改才会发生在RecyclerView`适配器中。

下面是一个使用DiffUtil的示例

这里有一个答案,用示例代码

郎雅昶
2023-03-14

很简单,你可以用这个表单刷新recyclerview

恢复状态

public override fun onResum() {
            super.onResum()
         list.remove(position);
         recycler.removeViewAt(position);
         mAdapter.notifyItemRemoved(position);                 
         mAdapter.notifyItemRangeChanged(position, list.size());
        }
 类似资料:
  • 我有一个recyclerview,我用itemtouchhelper类给它添加了swipe,它工作得很好,在布局中有两个视图,前台视图在bacjground层上滑动,问题是我希望前台视图在滑动后获得上一个位置,就像在三星手机中进行呼叫的滑动效果一样。我可以在刷卡后拨打notifyitemchanged来实现这一点。但我只工作了一次,如果我再次在该项上滑动,视图不会恢复,这是我的itemtouchh

  • 我有 主视图 在我的模板适配器上,我有另一个用于子视图的回收器适配器 代码工作,但是当用户在android设备上滚动时,父scrollView不允许我滚动回收器视图(1)

  • 在viewmodel类中获取数据方法

  • 我正在尝试使用RxJava在后台线程上使用我的RoomDatabase。 我的DAO类: 我的实体类(为简洁起见省略了getter和setter方法): 最后,这里是我的MeasurementDatabase类: 在我的片段中,我试图在单击菜单项后插入背景线程: 最终测量数据库appDb= 我收到一个错误,说: 我的RxJava代码中缺少了什么,没有将进程放在后台线程上?

  • 我对Room有一个问题,我在其他地方找不到帮助——在SQLite中使用“LIKE”时匹配任意数量字符的常用“%”与我们在团队项目中使用的Room delete查询不兼容。 我们在Kotlin中有一个定义为字符串的删除查询,在我们的一个DAO中: 以及同一DAO中的deleteRequest: 但是,在“:reservationCode”参数引用周围添加百分比符号后,我们会出现以下错误: 输入“从u