Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Передача данных между фрагментами

#android #java #android_fragment


Здравствуйте!
В фрагменте (1) есть ListView, со списком юзеров. По нажатию на сотрудника, открывается
другой фрагмент (2), с данными этого пользователя ID, Name, LastName. Как из фрагмента
(1), передать в фрагмент (2) значения id, name, lastName?.
Отправляю вот так: 
            Fragment f = new EmployeeDetails();
            Bundle bundle = new Bundle();
            bundle.putString("ID", "123");
            f.setArguments(bundle);
            FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction ft = fragmentManager.beginTransaction();
            ft.replace(R.id.content_frame, f);
            ft.commit();

Принимаю: 
      etId.setText(getArguments().getString("ID")); //NULL POINTER EXCEPTION
      Bundle bundle = this.getArguments();
      etId.setText(bundle.getString("ID"));
    


Ответы

Ответ 1



После создания фрагмента, вызовом метода setArguments() передайте ему Bundle с нужными данными. В самом фрагменте этот Bundle можно получить вызовом getArguments().

Ответ 2



Null может быть, если Вы дважды создаете фрагмент, который вызываете. Я делаю так: Шаг 1: Во фрагменте источнике (откуда передавать): Тело какого-то onClick { YourFragmentClass yfc = new YourFragmentClass(); Bundle bundle = new Bundle(); bundle.putInt("tag", intInformation); yfc.setArguments(bundle); android.app.FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction().replace(R.id.content_frame, yfc).commit(); } Если строку fragmentManager.beginTransaction().replace(R.id.content_frame, yfc).commit(); изменить на fragmentManager.beginTransaction().replace(R.id.content_frame, new YourFragmentClass()).commit(); то bundle будет всегда пустой - null. И все потому, что фрагмент создается заново и к нему не был прикреплен bundle. Шаг 2: Во фрагменте получателе (где получаем - YourFragmentClass): Bundle bundle = getArguments(); if (bundle != null) { Integer recieveInfo = bundle.getInt("tag"); }

Комментариев нет:

Отправить комментарий