Android: сохранение состояния фрагмента/содержимого каждого представления в каждом фрагменте при использовании ViewPager

Мне очень, очень нужна серьезная помощь здесь. Я создаю приложение для Android, которое использует PagerAdapter для создания Fragments в файле activity. Другой фрагмент состоит из разных представлений в зависимости от необходимости, которые создаются во время выполнения. В последнем фрагменте я создал своего рода "Submit button", который при нажатии должен получать введенные пользователем значения из каждого представления (например, EditText) из всех фрагментов.

Я использую следующую команду для получения просмотров (в вышеупомянутой кнопке clicklistener):

EditText e = (EditText) (getActivity().findViewById(i));

Но он не получает представление с этим идентификатором, кроме двух последних фрагментов. Итак, я предполагаю, что он сохраняет состояние только двух последних фрагментов в этом действии. Итак, как я могу сохранить 'view states' всех фрагментов в действии??

И разве это не так, когда представление создается во фрагменте и добавляется в его макет, это представление также добавляется в макет основного действия?? Я понимаю это неправильно? Пожалуйста, дайте мне знать.

Чтобы упростить его, мой вопрос:

Как мы можем сохранить содержимое, введенное пользователями, в динамически создаваемом EditText во фрагментах, созданных с помощью ViewPager (чтобы к нему можно было получить доступ позже)??


person lasata    schedule 13.09.2011    source источник


Ответы (1)


Когда вы добавляете фрагмент в FragmentPagerAdapter (при условии, что вы не написали собственный пейджер), он добавляется в FragmentManager. Диспетчер фрагментов не зависит от жизненного цикла активности, поэтому он сохраняет состояние фрагмента.

Если вы посмотрите здесь: http://code.google.com/p/ratebeerforandroid/source/browse/trunk/JakeWharton-ActionBarSherlock/library/src/android/support/v4/app/FragmentPagerAdapter.java?spec=svn42&r=42

Вы можете получить представление о том, как это работает. Если вы хотите сохранить состояние фрагмента для другого сеанса, вам нужно будет вернуть каждый фрагмент (getItem) и либо использовать onSaveInstanceState, либо написать свою собственную пользовательскую функцию.

надеюсь, это поможет

person MilesB    schedule 07.10.2011