2017-10-15 2 views
0

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); 
} 
+0

Wie fügen Sie Ihrer Carrier-Aktivität Fragmente hinzu? Können Sie diese Code-Snippets freigeben? – Sanoop

Antwort

0

Nun können Sie .add() verwenden Fragmente auf Ihre Aktivität als .replace() hinzuzufügen, die den Zustand des Fragments innerhalb der Aktivität bewahrt, und wenn Funktion ersetzen, die die onCreateView Rückruf wird dazu führen, erneut auslösen.

Verwandte Themen