我在我的活动中有五个片段。在点击片段抽屉列表中,我打电话给setFrament()
方法。 它从活动中删除以前的片段,并根据需求添加新的片段。 这里是我的代码setFragment
方法。getFragmentByTag()永不返回空
protected void setFragment(final int position) {
// Remove currently active fragment
if (mActiveFragment != null) {
Fragment previous;
while ((previous = mFragmentManager
.findFragmentByTag(mActiveFragment.toString())) != null) {
mFragmentManager.beginTransaction().remove(previous).commit();
Log.e("in loop", "stuck");
}
}
// It's enum, generated according to position
FragmentType type = getFragmentType(position);
Fragment fragment = mFragmentManager.findFragmentByTag(type.toString());
if (fragment == null) {
fragment = createFragment(type);
}
mFragmentManager
.beginTransaction()
.replace(R.id.containerFrameLayout, fragment,
type.toString()).commit();
// Sets the current selected fragment checked in
// Drawer listview
mFragmentDrawerList.setItemChecked(position, true);
// set Actionbar title
getActionBar().setTitle(type + "");
mActiveFragment = type;
}
这里,同时改变片段,它一直在prining while循环永远“卡壳”, 我的问题是,为什么 方法remove(Fragment)
不会删除从活动之前的片段?
好吧,目前只有一个片段,但可以有很多,这就是我在while循环中使用的原因。我不能使用popBackStack方法,因为它不适合我的需要。任何选择? – jimmy0251
不幸的是,FragmentManager不能很好地处理不在堆栈上的碎片。我能想到的唯一方法是持有对片段的引用,并分别调用每个片段上的remove()。我会更新一些解决方案,但我真的不喜欢他们中的任何一个。 – DeeV