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),因为它们没有相同的堆栈,您将无法访问原始对话框片段并将其删除 我猜唯一可能的方法是关闭当前的对话框片段
,并显示新的。请先访问此网站。最好也留下评论,而不仅仅是否决答案。其次,为感兴趣的人编辑答案