У меня есть эта структура:Передача данных или поведение между действиями и фрагментами
Деятельность A имеет ViewPager. Страницы ViewPager известны как фрагменты.
Деятельность A имеет список сложных объектов, которые я хочу отобразить на страницах.
Когда пользователь нажимает на элемент внутри ViewPager, необходимо запустить B. Упражнение B также нуждается в списке со сложными объектами.
Так что я должен передать этот список
А -> Фрагмент (ы) -> B
Сначала я узнал, что это не представляется возможным использовать конструктор фрагмента, чтобы передать данные. Я должен использовать разборчивый или сериализуемый. В фрагменте я тогда должен разбазаривать или сериализовать снова перейти к В.
Но я не хочу, чтобы сериализации или разбазаривать весь список сложных данных только в 2 раза, чтобы получить его до B.
I хотелось бы избежать использования статических полей.
Затем я пришел к идее передать слушателю фрагмент, который прослушивает щелчок элемента и уведомляет о моей активности. А и действие А затем запускает активность Б с данными. Это выглядит очень чисто для меня, потому что A на самом деле тот, к которому принадлежат данные, поэтому A начинает фрагмент с данными, фрагмент возвращается к A, а затем A запускает B с данными. Мне не нужно передавать данные везде (сериализация!).
Но это не работает, потому что, как передать слушателю фрагмент с использованием сериализации? Что не так, если вы используете прослушиватель в фрагменте, чтобы вернуться к активности?
Как это решить?
Редактировать
Я нашел это решение в теме про диалоговых фрагментов: Get data back from a fragment dialog - best practices?
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnArticleSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");
}
}
Так я добавляю это мой фрагмент и сделать свою деятельность реализовывать определенный интерфейс.
Это решит проблему передачи данных из фрагментов в B. Но мне все равно нужно передать список из A в фрагменты. Возможно, мне придется использовать Parcelable ...
Edit: Я пытался Parcelable, это работает. Но у объектов в моем списке есть много полей между ними, например, карты. Написание кода Parcelable (запись/чтение) является болью. Возможно, я просто придерживаюсь статических данных ...
У меня такая же проблема. Мои сложные данные вычисляются и отображаются в списке активности A с использованием фрагмента, но детали будут отображаться как в активности B с использованием фрагмента, так и в двух панелях в одной и той же деятельности, но с разным фрагментом детали. У меня нет абсолютно никакой идеи, кроме как предоставить подробные данные, которые являются болью ... Вы придумали лучшие идеи? Например, положите его в объект приложения как промежуточную среду? – Zordid