2017-09-08 5 views
0

私は実際RecyclerViewを持っているfragment Xを持っています、Xは検索ビューを持っています、私は何かを検索し、いくつかの行にRecyclerViewをフィルタリングするために検索ビューを使用します。フィルタリングの後、ユーザがある行をクリックすると別のfragmentにYと移動します。ユーザがクリックするとXに戻ります。私の仕事はXがこの後に検索結果を保持し続けることです。これを達成するための最良のアプローチは何ですか?フラグメントの検索結果を復元するにはどうすればよいですか?

+0

ポストあなたのコードはここにあります。 –

答えて

0

Fragmentには、onSaveInstanceStateを特権的に上書きし、検索入力フィルタを格納するようにします。このようにしてonCreateを上書きすると、RecyclerViewに保存されたフィルタが適用されます。

別のフラグメントに移動する前に、からFragmentManagerを取得し、フラグメントをホストするActivityに一時的に保存してください。コンフィグレーションの変更(回転)のためにアクティビティの状態を正しく保存しないと、この状態は失われる可能性があります。onSaveInstanceStateActivityにオーバーライドする必要があります。または、Fragment.SavedStateをグローバルスコープ(一部の静的フィールドまたはApplication)に保存します。

前のフラグメントに戻るときは、Fragment.SavedStateのフラグメントを再作成します。 e。 Fragment#setInitialSavedState(Fragment.SavedState)を呼び出します。

詳細については、私のresearchを参照してください。

0

シングルトンパターンを使用してデータを保存できます。

など。

// 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; 
    } 
} 

今、あなたはどこからでもデータを保存し、retriveことができます。

//セッター

DataManager.getSharedInstance().setSearchResultItems(items); 

//ゲッター

List<String> items= DataManager.getSharedInstance().getSearchResultItems(); 
関連する問題