我正在尝试将标准Android片段与LiveData一起使用。 更新由房间数据库中的更新触发。 不幸的是,我的观察者没有被触发。
示例代码:
public class MyListFragment extends Fragment implements LifecycleRegistryOwner {
LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);
@Override
public LifecycleRegistry getLifecycle() {
return mLifecycleRegistry;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// ... normal code
AppDatabase database = AppDatabase.getDatabase(getContext());
LiveData<List<RssItem>> allRssItems = database.rssItemDao().getAllRssItems();
allRssItems.observe(this, rssItems -> setListContent(rssItems));
}
如果我强制忽略生命周期事件,我会收到更新。
allRssItems.observeForever(new Observer<List<RssItem>>() {
@Override
public void onChanged(@Nullable List<RssItem> rssItems) {
Toast.makeText(getContext(), "Update", Toast.LENGTH_SHORT).show();
setListContent(rssItems);
}
});
有人可以发现我的错误吗?我没有使用v4.Fragment,而是使用标准的Android,但是当我将LifecycleFragment中的实现复制到我的代码中时,我认为这应该可行。
答案 0 :(得分:3)
CommonsWare的评论和bug的链接解决了这个问题。对于标准片段,您需要自己触发相应的生命周期事件,例如,lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE);