J'essaie d'utiliser les fragments Android standard avec LiveData. La mise à jour est déclenchée par des mises à jour dans une base de données de salles. Malheureusement, mon observateur n'est pas déclenché.LiveData n'appelle pas LifecycleRegistryOwner si le fragment standard est utilisé
code Exemple:
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));
}
Si j'ignorer les mettre en vigueur les événements du cycle de vie, je reçois les mises à jour.
allRssItems.observeForever(new Observer<List<RssItem>>() {
@Override
public void onChanged(@Nullable List<RssItem> rssItems) {
Toast.makeText(getContext(), "Update", Toast.LENGTH_SHORT).show();
setListContent(rssItems);
}
});
Quelqu'un peut-il détecter mon erreur? Je n'utilise pas le fichier v4.Fragment, mais l'Android standard, mais comme j'ai copié l'implémentation de LifecycleFragment dans mon code, je suppose que cela devrait fonctionner.
Probablement une variante de [ce problème] (https://issuetracker.google.com/issues/62160522). – CommonsWare
Merci, Mark, c'est effectivement le problème. L'utilisation de la solution de contournement décrite dans https://issuetracker.google.com/issues/62160522#comment1 résout le problème. – vogella