Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
blocker147
0 / 0 / 5
Регистрация: 14.12.2015
Сообщений: 186
1

Return variable From Fragment to Fragment

11.09.2019, 14:57. Просмотров 150. Ответов 0
Метки нет (Все метки)

Почему я не могу вернуть переменную с Fragment на Fragment, а с DialogFragment на Fragmentмогу?
Я возвращаю переменную через интерфейс.

В MainActivity я сразу подгружаю фрагмент:
Java
1
2
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                new FirstFragment()).commit();
Вот класс FirstFragment. В нём есть 2 поля TextView: tvName, tvSecondFragment.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class FirstFragment extends Fragment implements NewNameFragment.OnNameEnter,  SecondFragment.SecondFragmentListener {
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.first_fragment, container, false);
 
//тут мы открываем класс NewNameFragment который наследуется от класса DialogFragment
tvName.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                NewNameFragment myCustomDialog = new NewNameFragment();
                myCustomDialog.setTargetFragment(FirstFragment.this, 1);
                myCustomDialog.show(getFragmentManager(), "MyCustomDialog");
            }
        });
 
//тут мы открываем SecondFragment, который наследуется от класса Fragment
        tvSecondFragment.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Fragment fragment = new SecondFragment();
                FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
                fragmentTransaction.add(R.id.fragment_container, fragment);
                fragmentTransaction.addToBackStack(null);
                fragmentTransaction.commit();
 
            }
        });
 
return view;
}
 
@Override
    public void getName(String name) {
        Log.d(TAG, "method getName called with variable: " + name);
        tvName.setText(name);
    }
 
    @Override
    public void sentAge(String input) {
        Log.d(TAG, "method sentAge called with variable: " + input);
    }
 
}

В обоих классах есть интерфейсы, которые должны вернуть переменную на фрагмент. В случае с DialogFragment переменная возвращается, в случае с Fragment выдаёт ошибку.
Код
Attempt to invoke interface method 
'void com.example.transfervariablesthroughfragment.SecondFragment$SecondFragmentListener.sentAge(java.lang.String)' 
on a null object reference
at com.example.transfervariablesthroughfragment.SecondFragment$1.onClick(SecondFragment.java:22))
Вот код класса SecondFragment:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class SecondFragment extends Fragment {
    private SecondFragmentListener listener;
    public interface SecondFragmentListener {
        public void sentAge(String input);
    }
 
    private EditText editText;
    private Button button;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.second_fragment, container, false);
 
        editText = view.findViewById(R.id.et_age);
        button = view.findViewById(R.id.btn_transfer_age);
 
//тут мы кликаем на кнопку и должны вернутся на FirstFragment и передать туда переменную
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getActivity(), "Button Pressed", Toast.LENGTH_SHORT).show();
                listener.sentAge(editText.getText().toString());
                getFragmentManager().popBackStack();
            }
        });
 
 
        return view;
    }
 
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        listener = (SecondFragmentListener) getTargetFragment();
    }
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2019, 14:57
Ответы с готовыми решениями:

Обновление fragment из другого fragment
Добрый вечер всем!! Подскажите пожалуйста как обновить один фрагмент из другого (а именно TextView...

Fragment
Eсть Activity состоящий из ActionBar в котором две вкладки, каждая из них это Fragment. Не пойму...

Анимация Fragment
Здравствуйте, такой вопрос. как прикрутить эту анимацию: <?xml version="1.0" encoding="utf-8"?>...

Reload Fragment
Такая проблема, по нажатию кнопки поиска у меня возвращается список, под который на фрагменте...

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

0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2019, 14:57

Кликабельные Fragment
Доброго дня, коллеги. Прошу помощи. Есть активити с scrollView, внутри его Fragment: ...

MapFragment в Fragment
Как получить MapFragment который находится в Fragment? Сейчас использую такой способ: MapFragment...

OnActivityResult For Fragment
Помогите решить проблему. У меня есть ListFragment который отображает фотки из бд и кнопка которая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.