android - 如果使用标准 Fragment,LiveData 不会调用 LifecycleRegistryOwner

标签 android android-architecture-components android-livedata

我正在尝试将标准 Android fragment 与 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 中的实现复制到我的代码中时,我认为这应该可行。

最佳答案

CommonsWare 的评论和错误链接解决了这个问题。对于标准 fragment ,您需要自己触发相应的生命周期事件,例如 lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE);

关于android - 如果使用标准 Fragment,LiveData 不会调用 LifecycleRegistryOwner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46229229/

相关文章:

android - FFmpeg 寻求(-ss)在某些设备上不起作用

android - Gradle 组装特定 flavor 并构建

android - 此应用程序未获得许可。请从android中的Android Market购买

android - 带有 viewmodel 和实时数据的 ViewPager,所有 6 个选项卡数据都被最后一个选项卡数据替换

android - 将 getActivity 作为 LifecycleOwner 传递给 fragment 中 LiveData 的观察方法的原因是什么?

android - 在 Android 上运行 Odoo (OpenERP) 服务器

android - 测试 LiveData 转换?

android - Android MVVM + 数据绑定(bind) + 架构组件示例(ViewModel 和 Room)

android - OnBindViewHolder 更新自动滚动到顶部

kotlin - 如何使用协程从 Room 返回单个(非 LiveData)对象