通过 MainActivity 中的函数启动 Fragment

Start Fragment via function in MainActivity

我正在尝试以编程方式启动片段。下面的函数本身运行良好。这里的问题是,我必须从另一个片段中调用该函数。从片段到 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.onClick(HomeFragment.java:53)

如何使用从另一个片段中调用的这段代码更改片段?

如果你想从其他片段中替换 MainActivity 中的片段,你可以在你的片段中进行(不需要从 MainActivity 调用函数), 在您的片段中使用它:

getFragmentManager().beginTransaction()
            .replace(R.id.nav_host_fragment, new Fragment1(), FragmentLoanList.class.getName()).addToBackStack(null)
            .commit();

片段A:

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

Activity一个

public void callFragmentB(){
   //run your fragment transaction To B here
}