3

Как точно работает v4.app.Fragment? У меня есть viewPager с 7 фрагментами. Я был уверен, что при перемещении между фрагментами, в зависимости от ситуации, каждый фрагмент может быть автоматически уничтожен и создан. Однако, похоже, это не так.v4.app.Fragment, когда он создан и уничтожен?

я решил немного поиграть с отладкой и установить некоторый флаг для моего класса Фрагмент объекта, что-то вроде

class MyClass extends Fragment { 
public boolean myFlag=false; 

Когда я установил отл. true где-то в коде, который запускается только один раз (например, true устанавливается после нажатия кнопки), кажется, что это значение истинно до тех пор, пока приложение не закончится. Таким образом, предполагается, что объект хранится все время в памяти.

Однако, когда пользователь перемещается между фрагментами onCreateView и onViewStateRestored, методы, как представляется, называются.

И теперь я чувствую себя довольно смущенным. Если фрагменты не уничтожены, почему эти методы выполняются Android?

Есть ли у меня гарантия того, что мой объект Fragment будет храниться всегда со всеми полями (когда пользователь только перемещается между фрагментами и не покидает приложение)?

Если нет, как сохранить и восстановить его состояние? public void onSaveInstanceState(Bundle savedInstanceState) метод, похоже, запускается только при выходе пользователя из приложения, а не при перемещении пользователя между фрагментами.

Вы видели хороший учебник относительно ViewPager и фрагментов?

ответ

3

И теперь я чувствую себя довольно смущенным. Если фрагменты не уничтожены, почему эти методы выполняются Android?

Если вы посмотрите на эту диаграмму, Fragments не нужно уничтожать, чтобы позвонить по телефону onCreateView(). enter image description here

У меня есть гарантия, что мой объект фрагмент будет храниться всегда со всеми полями (когда пользователь перемещает только beteween фрагментов и не оставить приложение)?

Это зависит от того, что вы делаете. Если ваш случай имеет дело с ViewPager, он действительно сводится к тому, что вы используете PagerAdapter и вашей конфигурации ViewPager.

Если нет, как сохранить и восстановить его состояние? public void onSaveInstanceState (Bundle savedInstanceState), похоже, только запускается, когда пользователь покидает приложение, а не когда пользователь перемещается между фрагментами.

Это зависит от того, при каких условиях вы хотите восстановить статус. Например, для изменения ориентации вы можете позвонить setRetainInstance(true) по адресу Fragment, и состояние будет сохранено при изменении конфигурации, если ваш Fragment не находится в задней части.

Вы видели хороший учебник относительно ViewPager и фрагментов?

Android Guide имеет хороший учебник.

+0

Большое спасибо. Я использую FragmentPagerAdapter. В этом случае, хорошо ли я понимаю, все фрагменты должны оставаться в живых? – user2707175

+0

Возвращаясь к состоянию сохранения, если я использую адаптер, который динамически создает и уничтожает фрагменты, как сохранить и восстановить состояние? – user2707175

+0

И это Android-руководство, даже если оно дает дополнительную информацию, похоже, не вызывает сомнений по всем моим сомнениям. :( – user2707175

1

Вы можете повторно инициализировать все значения конкретного фрагмента в его методе onCreate(...). Таким образом, когда он будет перемещен, он будет иметь значения по умолчанию, которые вы настраиваете в своем методе onCreate(...).

Вот некоторые полезные ссылки, связанные с реализацией фрагментов в ViewPager:
1. http://thepseudocoder.wordpress.com/2011/10/13/android-tabs-viewpager-swipe-able-tabs-ftw/
2. http://androidtrainningcenter.blogspot.co.il/2012/10/viewpager-example-in-android.html
3. http://manishkpr.webheavens.com/android-viewpager-example/
4. http://thepseudocoder.wordpress.com/2011/10/05/android-page-swiping-using-viewpager/

Я надеюсь, что это помогает.

+0

Спасибо за все эти ссылки. Они дают некоторый «свет». Однако они не объясняют, когда фрагменты создаются и уничтожаются автоматически и как правильно хранить фрагменты (в одном примере они используют onSaveInstanceState (Bundle outState), но я не уверен, достаточно ли этого, основываясь на моем опыте, который этот метод вызывается только при выходе из приложения, а не при перемещении между фрагментами). – user2707175

Смежные вопросы