删除后,Android子片段不为null

时间:2017-04-06 18:33:29

标签: android android-fragments child-fragment

我正在尝试根据子片段是否存在来运行某些操作。这是我的代码:

private void addChatFragment() {
    getChildFragmentManager()
            .beginTransaction()
            .add(R.id.chat_container, ChatFragment.newInstance(),
                    ChatFragment.FRAGMENT_TAG).commitAllowingStateLoss();
}

private void removeChatFragment() {
    ChatFragment f = (ChatFragment)getChildFragmentManager()
            .findFragmentByTag(ChatFragment.FRAGMENT_TAG);
    if(f != null) {
        getChildFragmentManager().beginTransaction().remove(f).commit();
    }

    Log.v("qwer", "is chat fragment null: " + getChildFragmentManager()
            .findFragmentByTag(ChatFragment.FRAGMENT_TAG));

}

问题是删除后我的聊天片段不为空。这是预期的行为吗?有没有办法完全“删除”到片段为空的位置?

2 个答案:

答案 0 :(得分:1)

FragmentTransaction#commit计划删除片段,因此它是异步完成的。 FragmentTransaction#commitNow同步删除。

答案 1 :(得分:0)

FragmentTransaction.commitNow 

适用于api 24,如果您的最低api低于您可以在commit()之后使用popBackStack()的API,则适用于更多API。

 fragmentTransaction.remove(fragmentA);
 fragmentTransaction.commit();
 fragmentManager.popBackStack();