2017-09-08 1 views
0

Ich habe eine fragment X, die in der Tat eine RecyclerView hat, X hat eine Suchansicht, ich verwende die Suchansicht, um etwas zu suchen und die RecyclerView in wenigen Zeilen zu filtern. Nach dem Filtern, wenn der Benutzer auf eine Zeile klickt, geht es zu einem anderen fragment sagen Y. Von dort, wenn der Benutzer zurück klickt, kommt es zurück zu X. Meine Aufgabe ist es, dass X die Suchergebnisse nach dieser Rückkehr persistieren sollte. Was ist der beste Ansatz, um dies zu erreichen?Wie Suchergebnisse in Fragment wiederherstellen?

+0

Post Dein Code hier. –

Antwort

0

Eigenschaft überschreiben onSaveInstanceState in Fragment, so dass es Sucheingabe - Filter speichern wird. Überschreiben Sie auch onCreate so, dass der gespeicherte Filter auf Ihre RecyclerView angewendet wird.

Bevor zu einem anderen Fragment der Navigation erhalten Fragment.SavedState über FragmentManager und es vorübergehend in Activity speichern, die Ihre Fragmente hostet. Beachten Sie, dass dieser Status verloren gehen kann, wenn Sie den Aktivitätsstatus aufgrund von Konfigurationsänderungen nicht ordnungsgemäß speichern (rotate) = Sie müssen auch onSaveInstanceState in Activity überschreiben. Oder speichern Sie einfach Fragment.SavedState im globalen Bereich (irgendein statisches Feld oder in Application).

Wenn Sie zum vorherigen Fragment zurückkehren, erstellen Sie das Fragment aus Fragment.SavedState i. e. Rufen Sie Fragment#setInitialSavedState(Fragment.SavedState) auf.

Für weitere Details siehe meine research zu ähnlichen Thema.

0

Sie können ein Singleton-Muster verwenden, um die Daten zu speichern!

z.

// DataManager.java

public class DataManager { 
    private static DataManager thisInstance; 

    // Declare instance variables 
    List<String> searchResultItems; 

    public static DataManager getSharedInstance() { 
     if (thisInstance == null) { 
      thisInstance = new DataManager(); 
     } 
     return thisInstance; 
    } 

    private DataManager() { 
     searchResultItems = new ArrayList<>(); 
    } 

    public List<String> getSearchResultItems() { 
     return searchResultItems; 
    } 

    public void setSearchResultItems(List<String> searchResultItems) { 
     this.searchResultItems = searchResultItems; 
    } 
} 

Jetzt können Sie speichern und retrive Daten von überall her:

// Setter

DataManager.getSharedInstance().setSearchResultItems(items); 

// Getter

List<String> items= DataManager.getSharedInstance().getSearchResultItems(); 
Verwandte Themen