Обновление фрагментов пейджера Android View из общих настроек

Я успешно преобразовал свое приложение из действий в приложение с вкладками/фрагментами с 2 вкладками/фрагментами и пролистыванием между ними :)

Сейчас у меня есть 2 вкладки: 1 - Основная вкладка - показывает текстовые поля и прочее в соответствии с настройками, хранящимися в общих настройках. 2 - Настройки - предлагает некоторые входы для изменения этих общих настроек.

Проблема в том, что когда я меняю настройки (общие настройки), главная вкладка не обновляется в соответствии с новыми общими настройками.

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

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

Любая помощь приветствуется. Я использую TabsAdapter из: http://developer.android.com/reference/android/support/v4/view/ViewPager.html


person samz    schedule 09.12.2012    source источник


Ответы (1)


У вас есть 2 варианта:

  1. Перезагрузите все фрагменты через основное действие, используя getActivity() во фрагменте настроек.

  2. Создайте интерфейс с именем SettingsListener, который будет иметь функцию, подобную onSettingsChanged(), и реализуйте ее в фрагментах, которые необходимо обновить. Фрагмент настроек будет содержать список слушателей.

person Rotem    schedule 09.12.2012
comment
Toda, несколько дополнительных вопросов: 1-> Фрагменты управляются внутри пейджера, так как мне сказать ему обновить свои фрагменты или просто перерисовать? - person samz; 10.12.2012
comment
2-› классический паттерн наблюдатель/слушатель. Я забыл о наблюдателях/слушателях в нем :) Проблема все еще в пейджере просмотра. Он управляет фрагментами, поэтому я точно не знаю, как управлять регистрацией (и, возможно, удалением) слушателей фрагментов настроек... - person samz; 10.12.2012
comment
Бевакаша :) 1 и 2. на самом деле вам не нужно перезагружать их все, вы можете иметь функцию в основном действии, которая будет обновлять только нужные фрагменты. Где это сделать, зависит от того, где вы создаете фрагменты - в действии или в адаптере ViewPager? вы воссоздаете их в функции getItem()? или у вас есть постоянный экземпляр каждого фрагмента? - person Rotem; 10.12.2012
comment
вы должны сделать свой фрагмент настроек постоянным, если вы не хотите терять список слушателей каждый раз, когда вы его уничтожаете и воссоздаете. или вы можете сохранить список слушателей в своем адаптере и в функции getItem() сделать что-то вроде этого: если это фрагмент настроек -> отправить ему список слушателей, иначе -> добавить этот фрагмент в список - person Rotem; 10.12.2012
comment
пока не успел реализовать. В любом случае - единственное решение, которое я нашел (с вашей помощью), - это самостоятельно обрабатывать фрагменты просмотра. адаптер должен держать карту position-›fragment — ставить на него на getItem, удалять на destroyXX. когда вам нужно обновить адаптер пейджера просмотра, переберите карту и решите, какой из них нуждается в обновлении (я сделал это с помощью интерфейса). - person samz; 21.12.2012