Android 以编程方式解除DialogFragment
如何通过编程消除DialogFragment?我目前正在通过以下方式创建对话框:Android 以编程方式解除DialogFragment,android,Android,如何通过编程消除DialogFragment?我目前正在通过以下方式创建对话框: void showDialogWithId(int id){ FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog"); if (prev != null) {
void showDialogWithId(int id){
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
if (id == SEARCHING_DIALOG){
// Create and show the dialog.
DialogFragment newFragment = MyDialogFragment.newInstance(SEARCHING_DIALOG,"TEST");
newFragment.show(ft, "dialog");
}
if (id == CONNECTING_DIALOG){
// Create and show the dialog.
DialogFragment newFragment = MyDialogFragment.newInstance(CONNECTING_DIALOG,"TEST");
newFragment.show(ft, "dialog");
}
if (id == CONNECTIVITY_DIALOG){
// Create and show the dialog.
DialogFragment newFragment = MyDialogFragment.newInstance(CONNECTIVITY_DIALOG);
newFragment.show(ft, "dialog");
}
}
我希望通过以下方式解雇他们:
public void dismissDialog(){
getFragmentManager().popBackStack();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
}
但是,不会取消对话框…尝试使用
getDialog().dismiss();
在对话框内部。例如,您可以通过它的标记找到DialogFragment,就像您这样做一样,然后调用它上的某个方法来调用此代码。我通常不会从活动中取消DialogFragment,我的对话框按钮会为我这样做。但我认为这也应该起作用。我不确定这将如何影响片段backstack tho。要聚合以前的响应和相关注释,要删除对话框,必须执行以下操作:
public void dismissDialog(){
Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
DialogFragment df = (DialogFragment) prev;
df.dismiss();
}
}
在我的用例中,我执行以下操作: 在显示对话框的活动(或任何其他位置)中定义成员变量:
private DialogFragment mMyDialog;
然后在显示之前分配mMyDialog:
mMyDialog = MyDialog.newInstance(...whatever vars...); // MyDialog is extended from DialogFragment
mMyDialog.show();
最后在需要关闭对话框的地方说:
if (mMyDialog != null) {
mMyDialog.dismiss();
mMyDialog = null;
}
MyProgressDialog
是一个扩展了DialogFragment
//如何展示
MyProgressDialog pd = new MyProgressDialog();
Bundle b = new Bundle();
b.putString(ProgressDialog.PROGRESS_TITLE, "Loading data");
b.putString(ProgressDialog.PROGRESS_MESSAGE, "Getting your data from server");
b.putBoolean(ProgressDialog.PROGRESS_IS_CALLBACK_NEEDED, false);
pd.setArguments(b);
pd.show(getActivity().getSupportFragmentManager(), ProgressDialog.class.getSimpleName());
//如何解雇
if (pd != null && pd.isAdded()) {
pd.dismiss();
pd = null;
}
也许它能帮到任何人, super.discouse();
做这项工作。谢谢-直接调用Dislose似乎有效:DialogFragment DialogFragment=(DialogFragment)getSupportFragmentManager()。findFragmentByTag(“dialog”);如果(dialogFragment!=null){dialogFragment.disease();}我真的不明白为什么我必须以这种方式从管理器访问片段,当我们直接调用getDialog时,是什么阻止返回值?这不是删除对话框片段的推荐方法。@uDevel根据您的意见,推荐的方法是什么?ol_v_er的答案是一个很好的开始。根据我的经验,最好使用transaction、remove、commit和executePendingTransactions来避免方向更改时对话框不断返回。您需要FragmentTransaction做什么?@blubb Right。这是源代码片段中的死代码。我刚把它取下来。