2012-04-09 3 views
1

У меня есть собственный Viewpager, в котором он отключает события касания. Поэтому у меня есть кнопки «Next» и «Back», которые управляют viewpager. Мой вопрос заключается в том, как передавать данные или пакеты между фрагментами в viewpager. Обычно это работало бы, но чувство, что фрагменты создаются, даже если они не показаны. Это из-за эффекта слайдера viewpager, он должен сделать фрагменты впереди и раньше, чтобы эффект работал. Поэтому я не могу использовать пакеты, так как фрагмент уже создан. Это то, что я пытаюсь сделатьПакеты прохода для просмотра между фрагментами

Фрагмент 1 -> Фрагмент 2 -> Фрагмент 3

Фрагмент 1 создан и так Fragment 2. Когда я нажимаю 'Далее' Фрагмент 2 показан. Я хочу передать пакет Fragment 3, когда я снова нажимаю «Next», но Fragment 3 уже создан, поэтому он не будет работать.

Другой способ, которым я думал, - вызвать метод в каждом фрагменте, когда Viewpager устанавливает его как текущий элемент.

+0

Должны ли данные быть там во время создания, или это нормально, если вы передадите его непосредственно перед его отображением? – dmon

+0

@dmon Он должен быть там перед его отображением. Как и Fragment 2, данные передаются прямо, когда я нажимаю «Next», затем отображается Fragment 3. –

ответ

1

Почему бы вам не создать интерфейс, который реализует все ваши фрагменты? Этот интерфейс будет иметь два метода: getParameterData() и setParameterData(). В вашем ViewPager, когда они нажимают следующий или предыдущий, вызовите getParameterData() на текущий фрагмент, затем вызовите setParameterData() на фрагмент, который будет отображаться.

+0

Вау я никогда не думал об этом, спасибо. Еще кое-что. Я заметил, что у Fragment есть метод под названием setUserVisibleHint (boolean isVisibleToUser). Это означает, что когда фрагмент отображается в пользовательском интерфейсе? Когда Viewpager устанавливает его как текущий элемент, вызываемый этим методом. –

+0

Возможно, я не уверен. Вы пытались переопределить 'onResume()'? – dmon

+0

Я использовал onResume(), но вызывается, когда создается фрагмент, который выключен. Так что это не сработало. SetUserVisibleHint отлично работает для того, что я пытаюсь сделать. Я просто проверяю, является ли isVisibleToUser логическим, чтобы увидеть, видно ли это на экране. –

1

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