【问题标题】:Fragment isAdded() returns false on an already added FragmentFragment isAdded() 在已添加的 Fragment 上返回 false
【发布时间】:2014-04-24 12:28:13
【问题描述】:

我有这个简洁的功能:

private void addMapFragment(){
    if(!mapFragment.isAdded()){
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.add(R.id.mapContainer, mapFragment);
        ft.commit();
    }
}

我在活动的onCreate() 中调用addMapFragment()。然后我有一个来自调用addMapMapFragment() 的网络请求的回调。 isAdded() 方法看起来一点用都没有,因为我遇到了一个崩溃提示“已添加片段:MapFragment[...]

有什么线索吗?

【问题讨论】:

    标签: android fragment fragmenttransaction


    【解决方案1】:

    FragmentTransactions异步提交。因此,您需要调用

    getFragmentManager().executePendingTransactions();
    

    你打电话之前

    Fragment.isAdded();
    

    这样,您可以确保一切都是最新的

    【讨论】:

    • 感谢 Philipp 为清晰起见对标题进行了编辑。尽管我在 FragmentManagerImpl.execPendingActions 中遇到了 NPE 的新问题,但我不再遇到此崩溃。我想有些事情我做得不太对。我还确保在 UI 线程上运行 executePendingTransactions()。
    【解决方案2】:

    相反,检查 getSupportFragmentManager.findFragmentById() 并查看您是否获得了预期的片段。如果现在您可以添加和提交。

    【讨论】:

    • 该解决方案的遗憾是它相对昂贵。
    • @Laurent 实际上并非如此,getFragmentManager().executePendingTransactions(); 将强制所有内容在主线程中同步执行。这比getSupportFragmentManager.findFragmentById()差多了。
    猜你喜欢
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多