В моем приложении у меня было несколько способов получить результаты поиска в результатах поиска. Если поисковая активность отправляла результаты, я бы проверял результаты в дополнительных целях 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;
}