我遇到了一个activity
的应用,以及基于Fragment
的所有导航。我有一个地方包含下一步:
fragment1替换为容器id1;
我使用add
将fragment2添加到同一个id1容器中;
在我使用replace
将fragment3添加到同一个id1容器之后;
这是三个不设防的交易。所有都添加到后台堆栈。但是当我按下后,最后,片段2没有出现,我只看到容器id1上的fragmtent1,但是片段2在后面的堆栈中,因为下一个按下后退按钮没有效果片段1仍然可见,在下一次按下后退按钮片段1将被删除来自容器。
看起来在第一次按下按钮后,fragment2不会创建其视图,因此他正在消失在容器上。
我用了替换代码的一部分:
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.kp_content_frame, fragment);
if (addToBackStack) {
transaction.addToBackStack(fragment.getTag());
}
if (allowingStateLoss) {
transaction.commitAllowingStateLoss();
} else {
transaction.commit();
}
添加:
final String tagToAdd = fragment instanceof BaseFragment ? ((BaseFragment) fragment).getCustomTag() : fragment.toString();
if(isDuplicateFragment(tagToAdd)) {
return;
}
FragmentTransaction transaction = fragmentManager.beginTransaction();
if (enterPopAnim != 0 || exitPopAnim != 0) {
transaction.setCustomAnimations(enterAnim, exitAnim, enterPopAnim, exitPopAnim);
} else if(enterAnim != 0 || exitAnim != 0) {
transaction.setCustomAnimations(enterAnim, exitAnim);
}
transaction.add(R.id.kp_content_frame, fragment, tagToAdd);
if (addToBackStack) {
transaction.addToBackStack(tagToAdd);
}
transaction.commit();
有什么想法吗?感谢。
答案 0 :(得分:1)
但是当我按下后,最后,片段2不会出现
因为容器id1中有两个片段。而fragment1位于fragment2之上。
我在容器id1上只看到fragmtent1,但是fragment2在后面的堆栈中,因为下一步按下后退按钮没有效果,fragment1仍然可见,
因为下一次按下后退按钮删除了看不见的fragment2。
简单解决方案:不要混用add
和replace
个交易。到处使用replace
。