如何在后台堆栈中添加最新的分片实例(如果我不知道分片标签& id)?
FragmentManager fragManager = activity.getSupportFragmentManager();
FragmentTransaction fragTransacion = fragMgr.beginTransaction();
/****After add , replace fragments
(some of the fragments are add to backstack , some are not)***/
//HERE, How can I get the latest added fragment from backstack ??
发布于 2012-03-20 21:38:02
您可以使用API级别14中引入的FragmentManager.BackStackEntry
的getName()
方法。此方法将返回一个标记,该标记是您使用addTobackStack(tag)
将片段添加到后台堆栈时使用的标记。
int index = getActivity().getFragmentManager().getBackStackEntryCount() - 1
FragmentManager.BackStackEntry backEntry = getFragmentManager().getBackStackEntryAt(index);
String tag = backEntry.getName();
Fragment fragment = getFragmentManager().findFragmentByTag(tag);
您需要确保将片段添加到后台堆栈,如下所示:
fragmentTransaction.addToBackStack(tag);
发布于 2014-04-05 21:13:41
FragmentManager.findFragmentById(fragmentsContainerId)
function返回到backstack中顶部Fragment
的链接。使用示例:
fragmentManager.addOnBackStackChangedListener(new OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
Fragment fr = fragmentManager.findFragmentById(R.id.fragmentsContainer);
if(fr!=null){
Log.e("fragment=", fr.getClass().getSimpleName());
}
}
});
发布于 2015-01-20 21:20:29
我亲自尝试了其中的许多解决方案,最终得到了这个有效的解决方案:
添加下面将多次使用的这个实用程序方法,以获取backstack中的碎片数量:
protected int getFragmentCount() {
return getSupportFragmentManager().getBackStackEntryCount();
}
然后,当您使用FragmentTransaction方法添加/替换您的片段时,为您的片段生成一个唯一的标记(例如:使用堆栈中的片段数量):
getSupportFragmentManager().beginTransaction().add(yourContainerId, yourFragment, Integer.toString(getFragmentCount()));
最后,您可以使用此方法在后台堆栈中找到任何片段:
private Fragment getFragmentAt(int index) {
return getFragmentCount() > 0 ? getSupportFragmentManager().findFragmentByTag(Integer.toString(index)) : null;
}
因此,在后栈中获取顶部片段可以通过调用以下命令轻松实现:
protected Fragment getCurrentFragment() {
return getFragmentAt(getFragmentCount() - 1);
}
希望这能有所帮助!
https://stackoverflow.com/questions/9702216
复制相似问题