SearchView返回搜索结果实现

时间:2016-01-12 20:23:39

标签: android searchview

我的SearchView中有一个ActionBar来过滤结果并在ListView中显示。用户点击某个项目后,我会开始一个新活动来显示该项目的详细信息。当他们点击后退按钮时,我想显示过滤后的搜索结果。他们输入的搜索短语保留在SearchView中。

实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

在我的应用中,我有几种方法可以将搜索结果放入搜索结果活动中。如果搜索活动是在结果中发送的,我会在Intent个附加内容中检查结果。如果发生方向更改,我会使用savedInstanceState重新填充搜索结果,如果我导航到详细信息活动,然后再次返回,我会从保存的文件中重新填充搜索结果。所以我的onCreate()代码有这样的结构:

if(savedInstanceState != null) {
    terms = savedInstanceState.getStringArrayList(TERM_RESULTS_KEY);
} else {
    Bundle args = getIntent().getExtras();
    if(args != null) {
        resultsData = args.getParcelableArrayList(SearchActivity.SEARCH_RESULT_ARGS);
        //...
    } else {
        terms = getSavedResults();
    }
}

当我离开活动时(如您提到的那样转到详细信息页面),我保存搜索结果如下:

private void saveResults(ArrayList<String> results) {
    try {
        FileOutputStream fileOutputStream = openFileOutput(SAVED_RESULTS_FILENAME, Context.MODE_PRIVATE);
        ObjectOutputStream out = new ObjectOutputStream(fileOutputStream);
        out.writeObject(results);
        out.close();
        fileOutputStream.close();

    } catch (IOException e) {
        e.printStackTrace();
    }
}

由于ArrayList是可序列化的,因此使用ObjectOutputStream写入磁盘非常容易。然后,当用户点击您的详细信息活动上的后退按钮时,您将检索以前的搜索结果,如下所示:

@SuppressWarnings("unchecked")
private ArrayList<String> getSavedResults() {
    ArrayList<String> savedResults = null;

    try {
        FileInputStream inputStream = openFileInput(SAVED_RESULTS_FILENAME);
        ObjectInputStream in = new ObjectInputStream(inputStream);
        savedResults = (ArrayList<String>) in.readObject();
        in.close();
        inputStream.close();

    } catch (IOException | ClassNotFoundException e) {
        e.printStackTrace();
    }

    return savedResults;
}