【问题标题】:Android child fragment not null after removing删除后Android子片段不为空
【发布时间】:2017-04-06 18:33:28
【问题描述】:

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

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

}

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

【问题讨论】:

    标签: android android-fragments child-fragment


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:
      FragmentTransaction.commitNow 
      

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

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

      【讨论】:

      • 如果您使用的是支持库版本,这只是对了一半。只要您使用的是 24.0.1 或更高版本,它就可以在任何 API 级别上运行。
      猜你喜欢
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多