2014-11-05 29 views
0

找到片段backstack上是否存在特定片段的最佳方法是什麼? 目前,我循環並使用片段類名稱來查看是否存在一個。 想知道我能否以有效的方式查詢FragmentManger在後臺找到一個片段

謝謝你的時間。

問候,

回答

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()); 
} 
+0

這正是我現在做的事情。這就是我的意思循環。感謝您的回答。你有沒有更好的方法來做到這一點,而不需要for()'循環? – 2014-11-05 05:21:48

1

是你可以在這之前,你必須設置標籤名稱和找到tagname.but片段它應該是獨一無二的。

String backStateName = fragment.getClass().getName(); 
 
\t \t String fragmentTag = backStateName; 
 

 
\t \t FragmentManager manager = this.getSupportFragmentManager(); 
 
\t \t boolean fragmentPopped = manager 
 
\t \t \t \t .popBackStackImmediate(backStateName, 0);

這裏是完整的代碼它是添加到堆棧中,發現它的片段的方法。

// For the Fragment Replace And AddtobackStack 
 
\t void replaceFragment(Fragment fragment) { 
 
\t \t String backStateName = fragment.getClass().getName(); 
 
\t \t String fragmentTag = backStateName; 
 

 
\t \t FragmentManager manager = this.getSupportFragmentManager(); 
 
\t \t boolean fragmentPopped = manager 
 
\t \t \t \t .popBackStackImmediate(backStateName, 0); 
 

 
\t \t if (!fragmentPopped && manager.findFragmentByTag(fragmentTag) == null) { 
 
\t \t \t // fragment not in back stack, create it. 
 
\t \t \t FragmentTransaction ft = manager.beginTransaction(); 
 
\t \t \t ft.replace(R.id.container, fragment, fragmentTag); 
 
\t \t \t ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
 

 
\t \t \t ft.addToBackStack(backStateName); 
 
\t \t \t ft.commit(); 
 

 
\t \t }

+0

這似乎是一個更好的主意。我會在測試後接受答案。非常感謝。欣賞它。 – 2014-11-05 05:41:08

+0

上述代碼是否適合您。 – 2014-11-05 10:02:38