0

У меня есть вкладка, которая показывает фрагмент с помощью viewpager, как обычно. Этот фрагмент имеет список.Как сделать DialogFragment вызов метода внутри другого фрагмента

Одно из действий пользователя показывает диалоговое окно для добавления в этот список нового элемента.

Я показываю диалог с помощью edittexts, чтобы пользователь создал новый элемент.

Вопрос в следующем: как я могу вставить этот элемент в список фрагментов просмотра?

Из любого фрагмента я могу вызвать getActivity() для доступа к активности, но как получить доступ к другому фрагменту, который отображается за диалоговым фрагментом?

Заранее спасибо.

ответ

1

Фрагмент с элементами списка - FragmentA Диалог - NewItemDialogFragment

вы упускаете метод setTargetFragment(). При создании вашего NewItemDialogFragment вызовите этот метод, передав FragmentA в качестве целевого фрагмента для вашего диалога. Позже вы можете получить доступ к экземпляру FragmentA, позвонив getTargetFragment() внутри NewItemDialogFragment и нанесите его на FragmentA и добавьте вновь созданный элемент.

В качестве альтернативы, вы можете создать интерфейс контракта между FragmentA и NewItemDialogFragment

+0

Отлично. Спасибо за ваш ответ, я считаю, что это правильный путь в соответствии с разработчиками Android. – Informatheus

1

Это звучит, как вы хотите, чтобы получить результатов от dialogfragment (, что пользователь вставленного на dialogfragment редактирование-текстах) и использовать это во фрагменте, который называется dialogfragment (добавить в качестве нового элемента к списку) - в этом случае selected answer here решает эту проблему - также я думаю, что this Gist - хороший ресурс для ссылки. В вашем случае я также думаю, что реализация какого-то пользовательского прослушивателя/обратного вызова, как это было в этом Gist, - хорошая идея. Надеюсь это поможет.

+0

Спасибо за ваш хороший ответ. – Informatheus

1

Вы можете использовать шину событий для этого.

http://square.github.io/otto/

Это пример использования:

Bus bus = new Bus(); 

bus.post(new AnswerAvailableEvent(42)); 

@Subscribe public void answerAvailable(AnswerAvailableEvent event) { 
    // TODO: React to the event somehow! 
} 

bus.register(this); // In order to receive events, a class instance needs to register with the bus. 
+0

Спасибо, я думал в этом lib, но мне нужно какое-то собственное решение. – Informatheus