2016-01-12 4 views
0

У меня есть SearchView в моем ActionBar, который фильтрует результаты и показывает в ListView. Когда пользователь нажимает на элемент, я запускаю новое действие, чтобы показать детали элемента. Когда они нажимают кнопку «Назад», я хочу показать результаты фильтрованного поиска. Найденная фраза поиска остается в SearchView.SearchView Вернуться к результатам поиска

Что было бы лучшим способом достичь этого?

ответ

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; 
} 
Смежные вопросы