findFragmentByTag 总是返回 null

Posted

技术标签:

【中文标题】findFragmentByTag 总是返回 null【英文标题】:findFragmentByTag always returns null 【发布时间】:2014-03-04 18:10:30 【问题描述】:

我哪里错了。我只想检查具有给定 ProductId 的片段是否已在 BackStack 中可用;

如果是,则不添加新的 Fragment,否则将当前的 Fragment 添加到 backstack。

public void showThisFragment(Fragment newFragment,int productId)
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.am_fragment_holder, newFragment);
    if(fragmentManager.findFragmentByTag(productId+"")==null)
        fragmentTransaction.addToBackStack(productId+"");
    else
        //TODO fragment already present
        //So dont add to the back stack
        
    fragmentTransaction.commit();

请帮忙!

【问题讨论】:

您必须使用键将片段添加到后台堆栈,这与首先添加带有键的片段不同。或者您可以通过直接搜索 backstack 来查找密钥。有一篇很好的文章here. 我无法使用密钥添加它..,在我的情况下,标签就是我所拥有的。你能帮我修改一下我现在的代码吗? 【参考方案1】:

替换片段没有添加标签。您应该使用三参数替换方法。我没有测试它,如果我是对的,请告诉我。

fragmentTransaction.replace(R.id.am_fragment_holder, newFragment, String.valueOf(productId));

【讨论】:

以上是关于findFragmentByTag 总是返回 null的主要内容,如果未能解决你的问题,请参考以下文章

findFragmentByTag() 在使用 replace() 方法执行 FragmentTransaction 后返回 null

DialogFragment findFragmentByTag 返回 null

findFragmentById() 和 findFragmentByTag()

通过 findFragmentByTag 从 FragmentManager 获取 DialogFragment

Redis 常用命令

nu.xom:Document