it-swarm.com.ru

Как передать переменную из Activity во Fragment и передать ее обратно?

В настоящее время я делаю приложение для Android и хочу передать дату между действием и фрагментом .. У моего действия есть кнопка, которая открывает фрагмент: DatePickerFragment.

В своей деятельности я показываю дату, которую хочу изменить с помощью фрагмента. Поэтому я хочу передать дату в средство выбора даты и отправить ее обратно в действие.

Я перепробовал много решений, но ни одно из них не работает. Простой способ передать аргумент, но это не может быть сделано с фрагментами.

114
user1687114

Чтобы передать информацию фрагменту, вы устанавливаете Arguments при ее создании, и вы можете получить этот аргумент позже с помощью метода onCreate или onCreateView вашего фрагмента.

В функции newInstance вашего фрагмента вы добавляете аргументы, которые хотите отправить ему:

/**
 * Create a new instance of DetailsFragment, initialized to
 * show the text at 'index'.
 */
public static DetailsFragment newInstance(int index) {
    DetailsFragment f = new DetailsFragment();
    // Supply index input as an argument.
    Bundle args = new Bundle();
    args.putInt("index", index);
    f.setArguments(args);
    return f;
}

Затем внутри фрагмента метода onCreate или onCreateView вы можете получить следующие аргументы:

Bundle args = getArguments();
int index = args.getInt("index", 0);

Если вы хотите теперь общаться с вашим фрагментом с вашей деятельностью (отправка или нет данных), вам нужно использовать интерфейсы. То, как вы можете это сделать, очень хорошо объяснено в руководстве по документированию связи между фрагментами. Поскольку все фрагменты обмениваются данными друг с другом через действие, в этом руководстве вы увидите, как вы можете отправлять данные из фактического фрагмента в его контейнер действий, чтобы использовать эти данные для действия или отправлять их в другой фрагмент, содержащийся в вашем действии. 

Учебное пособие по документации: 

http://developer.Android.com/training/basics/fragments/communicating.html

192
jpardogo

Отправка данных из Activity в Fragment

Деятельность:

Bundle bundle = new Bundle();
String myMessage = "Stackoverflow is cool!";
bundle.putString("message", myMessage );
FragmentClass fragInfo = new FragmentClass();
fragInfo.setArguments(bundle);
transaction.replace(R.id.fragment_single, fragInfo);
transaction.commit();

Фрагмент:

Чтение значения во фрагменте

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    String myValue = this.getArguments().getString("message");
    ...
    ...
    ...
}

Но если вы хотите отправить значения из фрагмента в активность, прочитайте ответ jpardogo, вам нужны интерфейсы, дополнительная информация: связь с другими фрагментами

82
Elenasys

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

https://github.com/greenrobot/EventBus

7
SemaphoreMetaphor

благодаря @ ρяσѕρєя K и Терри ... это мне очень помогает и отлично работает 

Из Activity вы отправляете данные с намерением:

Bundle bundle = new Bundle(); 
bundle.putString("edttext", "From Activity"); 
// set Fragmentclass Arguments
Fragmentclass fragobj = new Fragmentclass();
fragobj.setArguments(bundle);

и в методе Fragment onCreateView:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // get arguments
    String strtext = getArguments().getString("edttext");    
    return inflater.inflate(R.layout.fragment, container, false);
}

ссылка: Отправка данных об активности на фрагмент в Android

4
mahmoud zaher

Вы можете просто создать свой фрагмент с помощью пакета:

Fragment fragment = Fragment.instantiate(this, RolesTeamsListFragment.class.getName(), bundle);
0
stef