如何在片段中恢复搜索结果?

时间:2017-09-08 12:02:36

标签: android android-fragments

我有fragment X确实有RecyclerView,X有搜索视图,我使用搜索视图搜索某些内容并将RecyclerView过滤成几行。过滤后,如果用户点击了某一行,则会转到另一个fragment说Y.如果用户点击它,则会返回到X.我的任务是X应该在返回后保留搜索结果。实现这一目标的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

onSaveInstanceState中覆盖Fragment,以便存储搜索输入 - 过滤器。同样覆盖onCreate,以便在RecyclerView上应用已保存的过滤器。

在导航到另一个片段之前,通过Fragment.SavedState获取FragmentManager并将其临时保存在托管片段的Activity中。请注意,如果由于配置更改而未正确保存活动状态,则此状态可能会丢失(旋转)=您还必须覆盖onSaveInstanceState中的Activity。或者只是将Fragment.SavedState保存在全局范围(某些静态字段或Application)中。

导航回上一个片段时,从Fragment.SavedState i重新创建片段。即调用Fragment#setInitialSavedState(Fragment.SavedState)

有关详细信息,请参阅我的research类似主题。

答案 1 :(得分:0)

您可以使用单例模式存储数据!

E.g。

// DataManager.java

app

现在,您可以存储和检索来自任何地方的数据:

// Setter

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

// Getter

DataManager.getSharedInstance().setSearchResultItems(items);