0

我正在尝试使用 Room 数据库和 LiveData。我有 ViewModel,其中包含他们从 dao 获得的 LiveData。如果我更新 a Transaction,则LiveData<List<Transaction>>可以观察到,但LiveData<Transaction>根本没有观察到。这怎么可能?我究竟做错了什么?

public abstract class Dao {
    @Query("SELECT * FROM transact WHERE deleted = :value")
    public abstract LiveData<List<Transaction>> allTransactions(boolean value);

    @Query("SELECT * FROM transact WHERE guid = :guid AND deleted = :value ")
    public abstract LiveData<Transaction> getTransaction(String guid, boolean value);

    @Update(onConflict = OnConflictStrategy.REPLACE)
    protected abstract void updateTransaction(Transaction transaction);
}

有类似的问题,它提到了使用非@Singleton注释类时的 Dagger 并发症,不幸的是,这不是我的问题,即使我使用 Dagger。

4

2 回答 2

1

问题AppCompatActivityViewModelLiveData.

LiveData 观察者只为 Fragment 调用,而不是为 Activity 调用。我使用AppCompatActivityLifecycleOwner接口实现,但正确的是实现LifecycleRegistryOwner.

学分:https ://issuetracker.google.com/issues/63764057

于 2017-07-17T19:54:25.570 回答
0

在新版本 1.0.0 Alpha 9-1 中,Android 开发者发布说明公布

这是一个主要版本,其中核心生命周期工件(运行时,通用)和拱核心(通用)达到稳定版本 1.0.0。

随着这一变化,支持库 26.1.0 现在依赖于这些库。AppCompatActivity 和 Support Fragment 现在都实现了 LifecycleOwner 接口。

此版本还依赖支持库 26.1.0 来利用新的集成。

AppCompatActivity 和 Support Fragment 现在都应该在 LifecycleOwner 接口中实现

于 2017-09-28T06:04:41.147 回答