我有这些片段操作的方法:
public void replaceFragment(Fragment fragment) {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.main_frame, fragment);
fragmentTransaction.commit();
fragmentManager.executePendingTransactions();
}
public void addFragment(Fragment fragment, boolean addToBackStack) {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.main_frame, fragment);
if (addToBackStack) {
fragmentTransaction.addToBackStack(fragment.getClass().getName());
}
fragmentTransaction.commit();
fragmentManager.executePendingTransactions();
}
public void clearFragments() {
if (fragmentManager.getBackStackEntryCount() > 0) {
FragmentManager.BackStackEntry first = fragmentManager.getBackStackEntryAt(0);
fragmentManager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
}
情景:
在创建活动时,我从片段A开始。 addFragment(new A,false);
然后我添加片段B. replaceFragment(新B);
我添加了另一个片段C. addFragment(新C);
在C片段中我想将应用程序重置为A片段。我叫 clearFragments(); addFragment(new A,false);
问题是在按下C片段上的按钮后调用B片段onCreateView
,该片段清除片段并添加A片段。我没有看到片段,但它启动了崩溃我的应用程序的后台线程。我需要清除所有片段而不调用他们的onCreateView()
方法。
这是预期的行为,还是我做错了什么?
答案 0 :(得分:1)
实际上,在这种情况下,您将始终返回到片段B。
一步一步:
也许你忘了提一下?我试图在后面的堆栈中放入几个条目然后重置为第一个状态 - onCreateView被调用一次,仅用于第一个片段。