Передача данных между двумя фрагментами без использования активности
Я хочу передать данные между двумя фрагментами без использования активности и активности фрагмента.
Я не хочу передавать данные между фрагментами, используя такие действия: Общение с другими фрагментами
Ниже мой сценарий:
У меня есть один родительский фрагмент, и внутри него есть два дочерних фрагмента. Теперь мне нужно передать данные между этими двумя фрагментами. Как этого добиться?
Я посмотрел на это: Event Bus, но не получил рабочий пример для фрагментов.
Есть ли другая альтернатива для передачи данных между фрагментами?
Любая помощь будет оценена.
Отредактировано в соответствии с ответом InnocentKiller:
В FragmentOne я реализовал:
FragmentTwo = new FragmentTwo();
Bundle bundle = new Bundle();
bundle.putString("Hello", "My name is Siddharth");
fragment.setArguments(bundle);
В FragmentTwo я реализовал:
Bundle bundle = this.getArguments();
String myInt = bundle.getString("Hello","Test");
mStartTripButton.setText(myInt);
3 ответа
Лучший способ обмена данными между действием / фрагментами, фрагментом / фрагментом /, действием / действием, классом / классом, создать общий синглтон-класс, такой как:
public class DataHolderClass {
private static DataHolderClass dataObject = null;
private DataHolderClass() {
// left blank intentionally
}
public static DataHolderClass getInstance() {
if (dataObject == null)
dataObject = new DataHolderClass();
return dataObject;
}
private String distributor_id;;
public String getDistributor_id() {
return distributor_id;
}
public void setDistributor_id(String distributor_id) {
this.distributor_id = distributor_id;
}
}
теперь устанавливается из любого места (фрагмент, действие, класс) в любом событии, прежде чем перейти на новый экран
DataHolderClass.getInstance().setDistributor_id("your data");
теперь доберись куда угодно (фрагмент, активность, класс)
String _data = DataHolderClass.getInstance().getDistributor_id();
Вы можете использовать EventBus https://github.com/greenrobot/EventBus для передачи любого сложного объекта в Android.
Пример передачи объекта из одного действия в другое:
Добавьте ваш объект на EventBus:
EventBus.getDefault().postSticky(anyObject);
startActivity(new Intent(getActivity(), SomeActivity.class));
В любом месте в SomeActivity:
AnyObject anyObject = EventBus.getDefault().getStickyEvent(AnyObject.class);
Этот пример просто для того, чтобы показать, что он работает в разных видах деятельности, вы можете позвонить getStickyEvent
чтобы получить любой объект в любом месте вашего кода.
Таким образом, вы можете опубликовать объект во фрагменте A и использовать getStickyEvent во фрагменте B, чтобы получить его.
Это особенно удобно, если у вас много аргументов и / или сложных объектов, которые вы хотите переместить из одного места в другое. Просто создайте один объект-держатель, содержащий методы getter / setters для аргументов, а затем передайте его. Гораздо проще, чем передавать их отдельно и как-то сериализовать сложные объекты.
Я думаю, что вы пытаетесь передать данные из одного фрагмента в другой фрагмент, поэтому попробуйте использовать приведенный ниже код.
Используйте Bundle, поэтому напишите ниже код в первом фрагменте, откуда вы хотите отправить данные.
Fragment fragment = new Fragment();
Bundle bundle = new Bundle();
bundle.putString("message", "From Activity");
fragment.setArguments(bundle);
и чтобы получить эти данные, используйте следующий код в другом фрагменте
String strtext=getArguments().getString("message");