#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"); }
Комментариев нет:
Отправить комментарий