首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取backstack中的最新片段

获取backstack中的最新片段
EN

Stack Overflow用户
提问于 2012-03-14 20:43:33
回答 16查看 137K关注 0票数 113

如何在后台堆栈中添加最新的分片实例(如果我不知道分片标签& id)?

代码语言:javascript
复制
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 ??
EN

回答 16

Stack Overflow用户

发布于 2012-03-20 21:38:02

您可以使用API级别14中引入的FragmentManager.BackStackEntrygetName()方法。此方法将返回一个标记,该标记是您使用addTobackStack(tag)将片段添加到后台堆栈时使用的标记。

代码语言:javascript
复制
int index = getActivity().getFragmentManager().getBackStackEntryCount() - 1
FragmentManager.BackStackEntry backEntry = getFragmentManager().getBackStackEntryAt(index);
String tag = backEntry.getName();
Fragment fragment = getFragmentManager().findFragmentByTag(tag);

您需要确保将片段添加到后台堆栈,如下所示:

代码语言:javascript
复制
fragmentTransaction.addToBackStack(tag);
票数 160
EN

Stack Overflow用户

发布于 2014-04-05 21:13:41

代码语言:javascript
复制
FragmentManager.findFragmentById(fragmentsContainerId) 

function返回到backstack中顶部Fragment的链接。使用示例:

代码语言:javascript
复制
    fragmentManager.addOnBackStackChangedListener(new OnBackStackChangedListener() {
        @Override
        public void onBackStackChanged() {
            Fragment fr = fragmentManager.findFragmentById(R.id.fragmentsContainer);
            if(fr!=null){
                Log.e("fragment=", fr.getClass().getSimpleName());
            }
        }
    });
票数 49
EN

Stack Overflow用户

发布于 2015-01-20 21:20:29

我亲自尝试了其中的许多解决方案,最终得到了这个有效的解决方案:

添加下面将多次使用的这个实用程序方法,以获取backstack中的碎片数量:

代码语言:javascript
复制
protected int getFragmentCount() {
    return getSupportFragmentManager().getBackStackEntryCount();
}

然后,当您使用FragmentTransaction方法添加/替换您的片段时,为您的片段生成一个唯一的标记(例如:使用堆栈中的片段数量):

代码语言:javascript
复制
getSupportFragmentManager().beginTransaction().add(yourContainerId, yourFragment, Integer.toString(getFragmentCount()));

最后,您可以使用此方法在后台堆栈中找到任何片段:

代码语言:javascript
复制
private Fragment getFragmentAt(int index) {
    return getFragmentCount() > 0 ? getSupportFragmentManager().findFragmentByTag(Integer.toString(index)) : null;
}

因此,在后栈中获取顶部片段可以通过调用以下命令轻松实现:

代码语言:javascript
复制
protected Fragment getCurrentFragment() {
    return getFragmentAt(getFragmentCount() - 1);
}

希望这能有所帮助!

票数 43
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9702216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档