相关疑难解决方法(0)

使用Room,ViewModel和LiveData更改数据后重新加载RecyclerView

我一直试图解决一个问题,但没有成功。每当数据库(数据库室)中特定模型的记录发生更改时,我都想更新recyclerView。我使用ViewModel处理模型数据,记录列表存储在LiveData中。

数据库

@Database(entities = arrayOf(Additive::class), version = ElementDatabase.DB_VERSION, exportSchema = false)
    abstract class ElementDatabase() : RoomDatabase() {

        companion object {
            const val DB_NAME : String = "element_db"
            const val DB_VERSION : Int = 1

            fun get(appContext : Context) : ElementDatabase {
                return Room.databaseBuilder(appContext, ElementDatabase::class.java, DB_NAME).build()
            }
        }

        abstract fun additivesModels() : AdditiveDao

    }
Run Code Online (Sandbox Code Playgroud)

模型

@Entity
class Additive {

    @PrimaryKey @ColumnInfo(name = "id")
    var number : String = ""
    var dangerousness : Int = 0
    var description : String = "" …
Run Code Online (Sandbox Code Playgroud)

android mvvm viewmodel android-room android-livedata

5
推荐指数
0
解决办法
4855
查看次数

ViewModel、Room、LiveData、RecyclerView 过滤数据

我正在开发基于架构组件(ViewModel/Room/Livedata)和 RecyclerView 的库存应用程序。该应用程序基于 Google 在开发人员培训书中推荐的实践。
高级 Android 开发课程 - 使用架构组件:Room、LiveData、ViewModel

该应用程序具有相当复杂的数据模型,它实现为 Room 实体和关系(10 多个表、外键等)。我也有相应的 DAO。

主要活动是要使用的项目列表的 RecyclerView,当用户单击其中一个项目时,会打开一个特殊的子活动,用户必须输入保存到 Room 中的项目相关数据。由于 LiveData,用户返回到刷新的 MainActivity 数据。由于 ViewModel,配置更改也起作用。

该应用程序的工作流程如下:

  1. 用户从服务器下载数据,创建 Room DB,MainActivity 显示要使用的项目列表
  2. 用户浏览项目,点击其中一个,项目特定的子活动打开,用户记录保存到房间的数据
  3. 当所有物品完成用户上传物品记录数据到服务器时,房间中的数据被删除,用户可以下载新的物品列表
  4. 用户不能删除或插入新项目,只能在相应的子活动中记录其数据。下载数据时删除/插入的项目。

我想要的是过滤 MainActivity 的 RecyclerView 上的项目列表。

Google 和 Stackowerflow 的帖子推荐使用 Livedata 的 switchmap 进行过滤。
最佳实践:使用 Room 和 LiveData 的运行时过滤器
Android Room LiveData 选择查询参数

我不喜欢这种方法,因为

  1. 我必须去 Room 并在新的 AsyncTask 中查询数据
  2. Room 不提供基于复杂过滤模型的综合查询

    public abstract class DAO {
        @Transaction
        @Query("select * " +
                "from table1 t1 " +
                "join table2 t2 on …
    Run Code Online (Sandbox Code Playgroud)

android android-recyclerview android-room android-livedata android-architecture-lifecycle

5
推荐指数
0
解决办法
1635
查看次数