Android 如果使用标准片段,LiveData不会调用LifecycleRegistryOwner

Android 如果使用标准片段,LiveData不会调用LifecycleRegistryOwner,android,android-architecture-components,android-livedata,Android,Android Architecture Components,Android Livedata,我正在尝试将标准Android片段与LiveData结合使用。 更新由房间数据库中的更新触发。 不幸的是,我的观察者没有被触发 示例代码: public class MyListFragment extends Fragment implements LifecycleRegistryOwner { LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this); @Override public LifecycleReg

我正在尝试将标准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));
公共类MyListFragment扩展片段实现LifecycleRegistryOwner{
LifecycleRegistry mLifecycleRegistry=新的LifecycleRegistry(此);
@凌驾
公共生命周期注册表getLifecycle(){
返回mLifecycleRegistry;
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
//…正常代码
AppDatabase=AppDatabase.getDatabase(getContext());
LiveData allRssItems=database.rssItemDao().getAllRssItems();
观察(这个,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);
        }
    });
allRssItems.observeForever(新的观察者(){
@凌驾
更改后的公共void(@Nullable List rssItems){
Toast.makeText(getContext(),“Update”,Toast.LENGTH_SHORT.show();
setListContent(rssItems);
}
});

有人能发现我的错误吗?我使用的不是v4.Fragment,而是标准的Android版本,但当我将LifecycleFragment的实现复制到我的代码中时,我认为这应该是可行的。

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

可能是上的一个变体。谢谢,Mark,这确实是个问题。使用中描述的解决方法可以解决它。