0

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

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));

}

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

4

2 回答 2

1

FragmentTransaction#commit安排删除片段,因此它是异步完成的。FragmentTransaction#commitNow同步进行删除。

于 2017-04-06T18:36:08.197 回答
0
FragmentTransaction.commitNow 

适用于 api 24 及以上,如果您的 min api 低于您可以在 commit() 之后使用 popBackStack() 的值。

 fragmentTransaction.remove(fragmentA);
 fragmentTransaction.commit();
 fragmentManager.popBackStack();
于 2018-11-17T00:07:39.967 回答