我遇到了一个activity
基于Fragment
s 导航的应用程序。我有一个地方包含后续步骤:
fragment1 在容器 id1 中替换;我add
用于将 fragment2 添加到同一个 id1 容器中;在我replace
用于将 fragment3 添加到同一个 id1 容器之后;
这是三个不设防的交易。所有都添加到后堆栈。但是当我按下后退时,最后没有出现fragment2,我在容器id1上只看到fragmtent1,但fragment2在后退堆栈中,因为下一次按下后退按钮没有效果fragment1仍然可见,下一次按下后退按钮后fragment1将被删除从容器。
看起来在第一次按下后退按钮 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();
有任何想法吗?谢谢。