Получение данных внутри фрагмента из Activity - PullRequest
1 голос
/ 19 октября 2011

Я довольно много работаю с Android Fragment s, и одна из проблем, с которыми я сталкиваюсь, - это отсутствие надлежащего механизма для передачи в него сложных объектов.

В документации разработчиков Android для Fragments у них есть метод static с именем newInstance, вызываемый с некоторыми простыми аргументами, который будет упакован в Bundle и использован внутри Fragment. Однако этот метод нельзя использовать для передачи сложных объектов.

Поскольку я очень часто использую API Fragment, становится все более и более важным передавать ему сложные объекты. Один из способов сделать это - реализовать интерфейс Parcelable, чего я не хочу делать для всех классов.

Итак, я думал, что смогу сделать это:

  • Определите интерфейс, подобный этому, во фрагменте:

// Container Activity must implement this interface
public interface ReceiveDataInterface {
  public MyClass getData(uniqueFragmentID);
}

Принудительно выполнить действия с использованием этого фрагмента для реализации интерфейса и вызвать ReceiveDataInterface.getData(getArgument.getString(UNIQUEID))

  • Во фрагменте Activity создать экземпляр метода newInstance, передав uniqueFragmentID и реализовать ReceiveDataInterface, который дает данные на основе uniqueFragmentID.

Это хорошая идея сделать это? если нет, то почему? и как мне это сделать?

Примечание: это делается в тех же строках, что и OnArticleSelectedListener, описанный в документации.

Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2013

Другой подход - сделать Фрагмент независимым.Почему бы не написать код, который выбирает данные из сети / базы данных в самом фрагменте?

0 голосов
/ 20 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...