【发布时间】:2019-02-28 10:23:44
【问题描述】:
我想实现一个动态片段堆栈。更具体地说,例如假设以下堆栈:
A -> B -> C -> D
B 可能会在 D 之后再次添加。如果发生这种情况,我想删除 B,结果将是:
A -> C -> D -> B
我试着这样做:
void loadFragment(MyFragment f){
FragmentManager fm = getSupportFragmentManager();
MyFragment foundFragment = (MyFragment ) fm.findFragmentByTag(f.getClass().getName());
if(foundFragment!=null) {
fm.popBackStack(f.getTransactionId(), 0);
}
String tag = f.getClass().getName();
f.setTransactionId(tag);
fm.beginTransaction()
.addToBackStack(tag)
.replace(R.id.fragment_container, f, tag)
.commit();
}
所以我这样做:
loadFragment(A);
loadFragment(B);
loadFragment(A);
loadFragment(B);
然后我回击,将我降落到 A(到目前为止一切正常)
然后我再次反击,它再次将我降落到 A。(第二个 B 去了哪里???)
如果我再次回击,活动将关闭,因为没有更多的片段可以弹出。
我无法解释...
我怎样才能达到预期的行为?
【问题讨论】:
标签: android android-fragments fragmentmanager fragment-backstack