Постараюсь объяснить максимально подробно. Есть 2 фрагмента, в первом находится RecyclerView. Его элементы добавляются из REST-сервиса, пачками, постранично. То есть, создали фрагмент, подгрузили первые 20 элементов, юзер скроллит список, доходит до конца, тут подгружаются следующие 20 элементов и тд. Такой паттерн гуглится по "endless recyclerview".
По нажатию на элемент списка переходим на второй фрагмент:
Fragment product = new FragmentProduct();
Bundle bundle = new Bundle();
bundle.putString("PRODUCT", new Gson().toJson(mProductsAdapter.getItem(position)));
product.setArguments(bundle);
getActivity()
.getSupportFragmentManager()
.beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.replace(R.id.frame_container, product)
.addToBackStack(null)
.commit();
Обычное такое поведение, из списка продуктов открываем детальную информацию о выбранном продукте.
Так вот, как при нажатии юзером кнопки Back получить такое же состояние RecyclerView? Ведь первый фрагмент (со списком) уничтожается когда открывается второй (с детальной информацией об элементе списка)? Для первого фрагмента вызывается onDestroyView(), потом onCreateView() и RecyclerView заполняется заново. Тянуть из REST-сервиса все страницы которые успел проскроллить пользователь? - не вариант.
У меня есть 2 идеи:
1. Кэшировать элементы списка (сохранять их в БД) и когда возвращаемся на первый фрагмент со списком - читать из кэша, а не из сервиса.
2. Отказаться от использования фрагмента для детальной информации о продукте. Показывать ее в каком-нибудь диалоге, тогда фрагмент со списком ведь не будет уничтожаться?
Но все это как-то криво, я наверное, упустил какую-то базовую вещь по работе с фрагментами... Как обычно решают такую задачу?
Update: Надо наверное, еще отметить отдельно, что с сохранением положения скролла - проблем нет, вопрос именно в сохранении содержимого при открытии "дочернего" фрагмента.