在Backstack中找到一个片段

时间:2014-11-05 05:10:31

标签: android android-fragments

查找片段backstack上是否存在特定片段的最佳方法是什么? 目前,我循环并使用片段类名来查看是否存在一个。 想知道我是否能以有效的方式查询FragmentManger

感谢您的时间。

此致

2 个答案:

答案 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());
}