Как предотвратить вызов 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().