Я пытаюсь реализовать Навигацию с помощью компонентов архитектуры Jetpack в моем существующем приложении.
У меня есть одно приложение для действий, в котором основной фрагмент (ListFragment
) представляет собой списокПредметы.В настоящее время, когда пользователь нажимает на элемент списка, второй фрагмент добавляется в стек на fragmentTransaction.add(R.id.main, detailFragment)
.Таким образом, при нажатии кнопки «назад» DetailFragment
отсоединяется и снова отображается ListFragment
.
При использовании архитектуры навигации это обрабатывается автоматически.Вместо добавления нового фрагмента он заменяется на , поэтому представление фрагмента уничтожается, вызывается onDestroyView()
и вызывается onCreateView()
при нажатии back для воссоздания представления.
Я понимаючто это хороший шаблон, используемый с LiveData и ViewModel , чтобы избежать использования большего количества памяти, чем необходимо, но в моем случае это раздражает, потому что список имеет сложную компоновку и раздувает времяи загрузка процессора, также потому, что мне нужно сохранить позицию прокрутки списка и снова прокрутить до той же позиции, что пользователь оставил фрагмент.Это возможно, но, похоже, он должен существовать лучше.
Я пытался «сохранить» представление в приватном поле фрагмента и повторно использовать его на onCreateView()
, если оно уже есть, но, похоже,анти-шаблон.
private View view = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (view == null) {
view = inflater.inflate(R.layout.fragment_list, container, false);
//...
}
return view;
}
Есть ли другой, более изящный способ избежать повторного раздувания макета?