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

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

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

Solutions Collecting From Web of "Как предотвратить вызов onCreateView, когда кнопка назад нажата в фрагменте в android"

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

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

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

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

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

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

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

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

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

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

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