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