Android 如何用另一个DialogFragment替换DialogFragment?

Android 如何用另一个DialogFragment替换DialogFragment?,android,android-fragments,android-fragmentactivity,android-dialogfragment,Android,Android Fragments,Android Fragmentactivity,Android Dialogfragment,我们通过执行以下操作以编程方式添加一个通用/普通片段: fragmentTransaction.add(containerViewId, fragmentToAdd, fragmentTag); fragmentTransaction.replace(containerViewId, newFragment, tagOfNewFragment); 我们用另一个片段替换片段,方法如下: fragmentTransaction.add(containerViewId, fragmentToAdd

我们通过执行以下操作以编程方式添加一个通用/普通
片段

fragmentTransaction.add(containerViewId, fragmentToAdd, fragmentTag);
fragmentTransaction.replace(containerViewId, newFragment, tagOfNewFragment);
我们用另一个片段替换
片段,方法如下:

fragmentTransaction.add(containerViewId, fragmentToAdd, fragmentTag);
fragmentTransaction.replace(containerViewId, newFragment, tagOfNewFragment);
但是我们添加了一个
对话框片段

dialogFramentInstance.show(fragmentManager, fragmentTag);
问题是如何替换由
show()
方法添加的
DialogFragment

dialogFramentInstance.show(fragmentManager, fragmentTag);
只需使用add事务(没有容器)将对话框片段添加到片段管理器中


为了替换碎片,您需要一个容器,因为您没有容器,所以您唯一的选择是
取消()
第一个容器和
显示()
新的容器。

也许您可以这样做:

    public void showFragment(Fragment fragment) {
    if (fragment instanceof DialogFragment) {
        FragmentTransaction ft = mContext.getFragmentManager().beginTransaction();
        Fragment prev = mContext.getFragmentManager().findFragmentByTag("dialog");
        if (prev != null) {
            Log.d(TAG, "showFragment: remove prev...." + prev.getClass().getSimpleName());
            ft.remove(prev);
        }
        mContext.getFragmentManager().executePendingTransactions();
        if (!fragment.isAdded()){
            ft.addToBackStack(null);
            ((DialogFragment) fragment).show(ft, "dialog");
        } else {
            Log.w(TAG, "showFragment: fragment has been added!" );
        }
    }
}

所以我花了很多时间才弄明白

对话框片段显示方法仅添加片段,因此,如果要替换它们,必须手动删除以前的对话框片段


需要记住的一点是,使用与打开初始对话框片段相同的fragmentManager非常重要。例如,如果您通过活动(supportFragmentManager)打开第一个对话框片段,现在使用对话框片段管理器(childFragmentManager),因为它们没有相同的堆栈,您将无法访问原始对话框片段并将其删除

我猜唯一可能的方法是关闭当前的
对话框片段
,并显示新的。请先访问此网站。最好也留下评论,而不仅仅是否决答案。其次,为感兴趣的人编辑答案