Ich habe einige Fragmente implementiert, die von einer einzigen Aktivität gehostet werden (sie befinden sich in derselben Aktivität). In einem dieser Fragmente (sagen wir Fragment A) habe ich eine vertikale Recycleransicht.Wie speichern und wiederherstellen Recyclerview die Position zwischen 2 Fragmenten in der gleichen Aktivität?
Das Problem entsteht, wenn ich von Fragment A zu anderen Fragmenten navigieren möchte (wiederum in der gleichen Aktivität). Angenommen, ich klicke auf das mittlere Mitglied der Liste, dann navigiere ich zum nächsten Fragment. Wenn ich in das erste Fragment (Fragment A) zurückkehren möchte, bläht es die Liste von vorne auf. Scheinbar mit onSaveInstanceState()
und auch onCreateView()
verliere ich die Position, aber ich versuche die Position des ausgewählten Gegenstandes jedes Mal zu speichern und wiederherzustellen, wenn ich das Fragment beende oder eintrage.
Ich denke, dieses Problem kann aus dem Lebenszyklus von Fragmenten stammen, die alle in einer einzigen Aktivität sind. Wie this answer, zu erwähnen:
In einem Fragment, alle ihre Lebenszyklus Rückrufe werden an ihre Mutter Aktivität direkt gebunden. So wird onSaveInstanceState für das Fragment aufgerufen, wenn seine übergeordnete Aktivität onSaveInstanceState aufgerufen hat.
und deshalb betone ich auf die "Single" -Aktivität. Wie können wir mit einer solchen Situation umgehen?
Ich habe mein Programm debugged und onSaveInstanceState
und onCreateView
wurden nicht einmal aufgerufen, wenn sie sollten. Unten ist mein versucht Code:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState!=null){
selectedItem = savedInstanceState.getInt(BUNDLE_KEY_SELECTED_ITEM);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (savedInstanceState != null){
selectedItem = savedInstanceState.getInt(BUNDLE_KEY_SELECTED_ITEM);
}
myRecyclerView = (RecyclerView) v.findViewById(R.id.rv_mine);
// mData is a an ArrayList
myAdapter = new MyAdapter(mData, getContext(), this.selectedItem);
myLayoutManager = new LinearLayoutManager(getActivity());
myRecyclerView.setLayoutManager(myLayoutManager);
myRecyclerView.setAdapter(myAdapter);
return v;
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putInt(BUNDLE_KEY_SELECTED_ITEM,selectedItem);
super.onSaveInstanceState(outState);
}
Wie fügen Sie Ihrer Carrier-Aktivität Fragmente hinzu? Können Sie diese Code-Snippets freigeben? – Sanoop