Как предотвратить вызов onCreateView при нажатии кнопки назад в фрагменте в android

В моем приложении у меня есть функциональность на вкладке. На одной вкладке я показываю данные сервера в lisview, и при нажатии на эту страницу подробностей этот элемент списка будет открыт в новом фрагменте.

Но когда я нажимаю кнопку "Назад" на этой странице подробностей, каждый раз, когда oncreateview вызывает предыдущую страницу, поэтому каждый раз, когда создается список списков, и новые извлекают новые данные сервера. Итак, как предотвратить такое и просто отобразить предыдущее состояние при нажатии кнопки "Назад"?

Ответ 1

Я знаю, что было слишком много времени, чтобы дать этот ответ, но я предполагаю, что вы заменяете свой фрагмент на другой. Я хочу сказать, вы используете

ft.replace(R.id.realTabContent, fragment);

чтобы перейти к другому фрагменту, который вы используете в своем onItemClick, поэтому простое решение использует

ft.add(R.id.realTabContent, fragment);

вместо замены фрагмента.

Понять разницу между заменить и добавить. Это решит вашу проблему.

Заменить: он заменит исходный фрагмент и заново создаст представление, когда вы вернетесь
Добавить: он просто добавит новый фрагмент в стек.

Надеюсь, это поможет кому-то, кто сталкивается с той же проблемой...

Ответ 2

Я не думаю, что запрет вызова onCreateView - хорошая идея, кроме того, если функция не вызывается, будет исключение, поэтому нет, вы не должны. Вместо этого я предлагаю вам переместить ваш "listview created and new fetches new server data" в другое место, где вы можете явно позвонить (когда хотите, где хотите, onCreate() - хорошее место), не ставьте это в onCreateView(). Надеюсь, это поможет.

Ответ 3

Вы должны кэшировать свои объекты данных, кроме переменных вида, поскольку их ссылки необходимо обновить, если вы извлекаете данные с сервера и не хотите повторять вызов, а затем используйте ветвление для разветвления этого кода.

Создайте метод init(), в котором вы выполняете все вызовы инициализации и сервера и логически разветвляете вызов методом init(), когда вы не хотите вызывать init().