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