Meine App besteht aus 1 Fragment. Dieses Fragment enthält eine Recyclerview mit einer großen Anzahl von Einträgen.Android: seltsame Probleme in meiner App mit 1 Fragment nach der Drehung des Geräts
Das Symptom war, dass es nach der Drehung des Geräts nicht möglich war, die Recycleransicht zur gespeicherten Position zu scrollen. Was auch immer ich tat, kein Scrollen war das Ergebnis. Also, seltsame Dinge sind in der Benutzeroberfläche passiert.
EDIT (die Ursache enthüllt) ...
In meiner Tätigkeit ich diesen Code hatte ...
if (findViewById(R.id.fragment_container) != null) {
FragmentCategoryChecklist f2 = new FragmentCategoryChecklist();
Bundle b = new Bundle();
b.putString("contents", "Category Fragment");
f2.setArguments(b);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, f2).commit();
}
Das ist falsch! Siehe den folgenden Code. Wenn das Gerät mit diesem Code gedreht wird, wird jedes Mal ein neues Fragment erstellt. Das ist falsch, weil Android ALREADY das (gespeicherte) Fragment neu erstellt.
Das Ergebnis ist, dass ein Fragment mit Instanzdaten durch den Code erstellt, dann sofort zerstört und dann ohne Instanzdaten neu erstellt wird. Keine gespeicherten Instanzdaten bedeuten, dass nicht zu einer zuvor gespeicherten Position gescrollt wird.
Der korrekte Code wird unten angezeigt. Entschuldigung, meine Frage war nur ein Symptom und nicht die Ursache.
Fragment f = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
if(f == null) {
if (findViewById(R.id.fragment_container) != null) {
FragmentCategoryChecklist f2 = new FragmentCategoryChecklist();
Bundle b = new Bundle();
b.putString("contents", "Category Fragment");
f2.setArguments(b);
getSupportFragmentManager().
beginTransaction().
replace(R.id.fragment_container, f2).
commit();
}
}
Ich glaube, Sie können versuchen, eine Benutzeroberfläche mit Handler dafür. Veröffentlichen Sie ein "Runnable" in der UI-Nachrichtenwarteschlange und versuchen Sie dort "findLastCompletelyVisibleItemPosition" zu finden. Dies garantiert, dass dieses Runnable nach Lebenszyklus-Callbacks ausgeführt wird. Wenn das nicht funktioniert, poste hier einen Code, weil es schwierig ist, ein Problem zu finden. –
Können Sie Ihre Antwort näher ausführen? – tjm1706
Ich habe dies nicht als Antwort geschrieben, weil ich nicht 100% sicher bin, dass es funktioniert, also habe ich Sie gebeten, es zu versuchen. Funktioniert die @ bpr10-Lösung? –