我已经被困了两天了:
1个活动,3个片段(A,B和C)。 B和C是标签。如果我用B替换片段A并将A添加到后栈,如下所示:
fragmentManager.beginTransaction()
.addToBackStack("A_TO_B_TAG")
.replace(R.id.fragmentContainer, fragment, "FragmentB")
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.commit();
当我从片段C中击中插入符号并执行此操作时:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
//Pop the back stack and hide the Up caret
FragmentManager fm = mHostingActivity.getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
}
mHostingActivity.getDrawerToggle().setDrawerIndicatorEnabled(true);
//Kill any tabs
mHostingActivity.getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
mHostingActivity.getSupportActionBar().removeAllTabs();
return true;
}
return super.onOptionsItemSelected(item);
}
然后使用第一个代码段重新输入B,未调用onPause()/ onStop()并且两者都是在另一个之上绘制的。有谁知道是什么原因引起的?
我提交了一份错误报告,因为我真的不确定为什么会出现这种情况,它位于here。
答案 0 :(得分:0)
所以我可以告诉我这是发生了什么,如果有人偶然发现这个问题,我希望我的回答是有用的!
重新输入标签片段,即:
添加A - >用标签B替换A - >用标签C替换B - >弹出选项卡C - >然后再次用标签B替换A
对于最后一次转换,当用B替换时A不会分离,所以我把它放在片段A的onCreateView()
中 final FragmentManager fm = mHostingActivity.getSupportFragmentManager();
fm.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
if (fm.getBackStackEntryCount() == 0) {
Fragment fragmentB = fm.findFragmentByTag("FragmentB");
Fragment fragmentC = fm.findFragmentByTag("FragmentC");
if (fragmentB != null) {
//Hmm force detach here rather than when we pop via the up affordance
if (!fragmentB.isDetached())
fm.beginTransaction().detach(fragmentB).commit();
}
if (fragmentC != null) {
if (!fragmentC.isDetached())
fm.beginTransaction().detach(fragmentC).commit();
}
//Listened for any changes after re-entering the FragmentA so we can remove the listener
fm.removeOnBackStackChangedListener(this);
}
}
});
意味着创建了每次片段A,我们分离了任何错误地可能未被分离的标签片段。