Запустить фрагмент через функцию в MainActivity - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь запустить фрагмент программно. Функция ниже прекрасно работает сама по себе. Проблема в том, что я должен вызывать функцию из другого фрагмента. Вызов из фрагмента в MainActivity работает и не является проблемой.

public void gotoFragment1(){
    Fragment1 fragment = new Fragment1();
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.nav_host_fragment, fragment);
    transaction.addToBackStack(null);
    transaction.commit();
}

Если я пытаюсь вызвать функцию из другого фрагмента, приложение вылетает со следующей трассировкой стека:

java.lang.IllegalStateException: FragmentManager has not been attached to a host.
    at androidx.fragment.app.FragmentManager.enqueueAction(FragmentManager.java:1727)
    at androidx.fragment.app.BackStackRecord.commitInternal(BackStackRecord.java:321)
    at androidx.fragment.app.BackStackRecord.commit(BackStackRecord.java:286)
    at com.fewo.info.MainActivity.gotoVeranstaltungen(MainActivity.java:134)
    at com.fewo.info.ui.home.HomeFragment$1.onClick(HomeFragment.java:53)

Как я могу изменить фрагмент с помощью этого кода, вызываемого из другого фрагмента?

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Фрагмент A:

((ActivityOne) getActivity()).callFragmentB();

Задание 1

public void callFragmentB(){
   //run your fragment transaction To B here
}
1 голос
/ 05 апреля 2020

если вы хотите заменить фрагмент в MainActivity из других фрагментов, вы можете сделать это в своем фрагменте (не нужно вызывать функцию из MainActivity), используйте это в своем фрагменте:

getFragmentManager().beginTransaction()
            .replace(R.id.nav_host_fragment, new Fragment1(), FragmentLoanList.class.getName()).addToBackStack(null)
            .commit();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...