查找片段backstack
上是否存在特定片段的最佳方法是什么?
目前,我循环并使用片段类名来查看是否存在一个。
想知道我是否能以有效的方式查询FragmentManger
。
感谢您的时间。
此致
答案 0 :(得分:1)
是的,你可以通过tagname找到片段。但在此之前你必须设置那个标签名称,它应该是唯一的。
String backStateName = fragment.getClass().getName();
String fragmentTag = backStateName;
FragmentManager manager = this.getSupportFragmentManager();
boolean fragmentPopped = manager
.popBackStackImmediate(backStateName, 0);

这是完整的代码,它是一个将片段添加到backstack并找到它的方法。
// For the Fragment Replace And AddtobackStack
void replaceFragment(Fragment fragment) {
String backStateName = fragment.getClass().getName();
String fragmentTag = backStateName;
FragmentManager manager = this.getSupportFragmentManager();
boolean fragmentPopped = manager
.popBackStackImmediate(backStateName, 0);
if (!fragmentPopped && manager.findFragmentByTag(fragmentTag) == null) {
// fragment not in back stack, create it.
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.container, fragment, fragmentTag);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(backStateName);
ft.commit();
}

答案 1 :(得分:0)
你试试这个,
FragmentManager有方法:
getBackStackEntryCount()
getBackStackEntryAt (int index)
FragmentManager fm = getFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); i++) {
Log.i(TAG, "Found fragment: " + fm.getBackStackEntryAt(i).getId());
}