2
標準のAndroidフラグメントをLiveDataとともに使用しようとしています。 更新は、ルームデータベースの更新によってトリガーされます。 残念ながら、私の観察者は誘発されません。標準フラグメントが使用されている場合、LiveDataはLifecycleRegistryOwnerを呼び出さない
例コード:
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));
}
Iは、ライフサイクル・イベントを無視するように強制する場合、私が更新を受け取ります。
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の実装を自分のコードにコピーしたときに、これが機能するはずです。
おそらく[この問題]のバリエーション(https://issuetracker.google.com/issues/62160522)です。 – CommonsWare
ありがとう、マーク、それは確かに問題です。 https://issuetracker.google.com/issues/62160522#comment1に記載されている回避策を使用すると解決します。 – vogella