我正在尝试使用Room数据库& LiveData。
我有ViewModels,它保存了他们从dao获得的LiveData。
如果我更新了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,也不是我的问题。
答案 0 :(得分:1)
问题出在AppCompatActivity
内,ViewModel
与LiveData
一致。
仅为Fragment调用LiveData观察者,而不是为Activity调用。
我使用AppCompatActivity
并实现了LifecycleOwner
接口,但正确的是实现LifecycleRegistryOwner
。
答案 1 :(得分:0)
在新版本1.0.0 Alpha 9-1中,Android Developer发布了声明
这是核心生命周期工件的主要版本(运行时, common)和arch core(common)达到稳定版本1.0.0。
随着这一变化,支持库26.1.0现在依赖于这些 库。 AppCompatActivity和Support Fragment现在都可以实现 LifecycleOwner界面。
此版本还依赖于Support Library 26.1.0来利用 新的整合。
AppCompatActivity和Support Fragment现在都应该在LifecycleOwner接口上实现