i einem Datenspeicher zwei Fragmente und Adapter haben, Hauptidee ist:notifyDataSetChanged nicht mit Fragmenten Arbeits
- Fragment 1
onResume()
für neue Daten stellen - Daten geladen und die hinzugefügt auf Datenspeicher
- Broadcast sendet eine Nachricht
REST_UPDATE_ITEMS
- Fragment 1 abfangen, die Nachricht und aktualisieren Elemente in Adapter
Was ist los: Ich öffne Fragment 1 - es ist in Ordnung, neue Daten werden hochgeladen, neue Adapter erstellt und hinzugefügt RecyclerView
und ich sehe Elemente in Liste
wenn ich zu Fragment 2 gehe und dann zurück zu Fragment 1 - neue Daten hochgeladen und Fragment 1 Fänge neue Nachricht, aber die Liste ist leer
so: das ist Methode, die Nachricht fängt
case REST_UPDATE_ITEMS: {
if (adapter == null) {
adapter = new MyAdapter(getActivity(), DataStorage.getInstance().getItems());
recyclerView.setAdapter(adapter);
} else {
adapter.swap(DataStorage.getInstance().getItems());
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
}
});
}
break;
}
und nichts passiert, wenn notifyDataSetChanged()
genannt wird, nur leere Liste, aber wenn i erstellt nur jedes Mal einen neuen Adapter
case REST_UPDATE_ITEMS: {
adapter = new MyAdapter(getActivity(), DataStorage.getInstance().getItems());
recyclerView.setAdapter(adapter);
break;
}
es funktioniert und Aktualisieren von Daten jedes Mal, aber es blinkt! Jedes Mal, wenn ich sehe, blinkt das nervig.
ich reibungslose Daten Ersatz will, oder einfach nur nicht leere Liste jedes Mal, wenn ich Fragment öffnen: alte Daten -> einigen ausgefallenen Effekt -> neue Daten
Aber jedes Mal, wenn ich Fragment öffnen: leer -> blinken oder sogar Phantasie Effekt -> einige Daten
und das ist Swap-Methode von Adapter:
public void swap(ArrayList<Items> items){
this.items.clear();
this.items.addAll(items);
}
Fragmente erzeugt, wenn die Aktivität beginnt und dann nur
öffnen Fragment 2 und
getFragmentManager().beginTransaction().replace(R.id.frame_layout, fragment1).commit();
zurück zum Fragmente gehen 1
Bevor Sie notifychange aufrufen, stellen Sie sicher, dass Sie die neuen Daten zuerst zu Ihrer Arraylist hinzufügen, dann notify change –
Daten wurden korrekt hinzugefügt, trotzdem funktionierte es nicht –