Ich versuche, die standardmäßigen Android-Fragmente zusammen mit LiveData zu verwenden. Das Update wird durch Aktualisierungen in einer Raumdatenbank ausgelöst. Leider wird mein Beobachter nicht ausgelöst.LiveData ruft LifecycleRegistryOwner nicht auf, wenn das Standardfragment verwendet wird
Beispielcode:
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));
}
Wenn ich die Lebenszyklus-Ereignisse zu ignorieren erzwingen zu, erhalte ich die Updates.
allRssItems.observeForever(new Observer<List<RssItem>>() {
@Override
public void onChanged(@Nullable List<RssItem> rssItems) {
Toast.makeText(getContext(), "Update", Toast.LENGTH_SHORT).show();
setListContent(rssItems);
}
});
Kann jemand meinen Fehler finden? Ich verwende nicht das v4.Fragment, sondern das Standard-Android, aber da ich die Implementierung von LifecycleFragment in meinen Code kopiert habe, gehe ich davon aus, dass dies funktionieren sollte.
Wahrscheinlich eine Variation zu [dieser Ausgabe] (https://issuetracker.google.com/issues/62160522). – CommonsWare
Danke, Mark, das ist in der Tat das Problem. Durch die Verwendung der in https://issuetracker.google.com/issues/62160522#comment1 beschriebenen Problemumgehung wird das Problem gelöst. – vogella