AlertDialog 未被关闭。
AlertDialog not being dismissed.
我创建了一个用于不同活动的 AlertDialog 片段。由于某种原因,警报没有被解除,主 activity 中的代码也没有继续。我输入了很多日志记录命令来准确查看它停止的位置。下面是我的警报对话框:
public class Convert_units_dialog extends DialogFragment {
final static String TAG = "TAG_convert_units";
public static Convert_units_dialog newInstance() {
Convert_units_dialog frag = new Convert_units_dialog();
Bundle args = new Bundle();
args.putInt("title", R.string.change_units_dialog);
frag.setArguments(args);
return frag;
}
public Dialog onCreateDialog(Bundle savedInstanceState) {
int title = getArguments().getInt("title");
return new AlertDialog.Builder(getActivity())
.setTitle(title)
.setPositiveButton(R.string.convert, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i(TAG, "inside click listener");
convert_units();
//dismiss dialog here
Log.i(TAG, "Start dismiss");
dismiss();
Log.i(TAG, "End dismiss");
}
})
.setNegativeButton(R.string.dont_convert,null)
.create();
}
在我的 activity 中,我创建了一个调用 alertDialog 的函数。
private void open_alert_dialog() {
DialogFragment newFragment = Convert_units_dialog.newInstance();
newFragment.show(getFragmentManager(), "dialog");
Log.i(TAG,"open_alert_dialog finished");
}
当我 运行 我的代码时,我在日志中得到 "end dismiss" 并且从未看到 "open_alert_dialog finished" 所以我的 activity 中此命令后的代码不是 运行。有什么明显的我做错了吗?我已经尝试了很多我看到的建议,但 none 到目前为止都有效。
总的来说,我对编程有点陌生,如果有任何意见,我将不胜感激。谢谢
您的代码似乎是正确的,但请尝试一些操作,看看它是否解决:
- 检查 DialogFragment 和 AlertDialog 的导入,它们在 Activity 和 Convert_units_dialog. (如果您使用的是 appcompat-v7 库,则会显示其他导入选项)
- 在 setPositiveButton 上尝试调用 dialog.dismiss(); 而不是 dismiss();
为了给您一个准确的答案,我们需要一些信息,例如:
- convert_units();
的实现是什么
- 你在 Activity 的哪个位置打电话给 open_alert_dialog()
最后,查看文档,我相信你已经在查看它了,但值得一试再读一遍:http://developer.android.com/reference/android/app/DialogFragment.html#AlertDialog
一个更新:
我想我误解了发生的事情,并通过文档弄明白了。我添加了对 doPositiveClick()
的方法调用
我的新代码如下所示:
return new AlertDialog.Builder(getActivity())
.setTitle(title)
.setPositiveButton(R.string.convert, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i(TAG, "inside click listener");
convert_units();
//dismiss dialog here
((Settings)getActivity()).doPositiveClick();
}
})
.setNegativeButton(R.string.dont_convert,null)
.create();
}
然后我在我的 Activity 中创建了 doPositiveClick() 以及我期望在关闭 alertDialog 后 运行 的其余代码。
public void doPositiveClick() {
// Do stuff here.
Log.i("FragmentAlertDialog", "Positive click!");
display_maxes();
}
现在一切正常。
我创建了一个用于不同活动的 AlertDialog 片段。由于某种原因,警报没有被解除,主 activity 中的代码也没有继续。我输入了很多日志记录命令来准确查看它停止的位置。下面是我的警报对话框:
public class Convert_units_dialog extends DialogFragment {
final static String TAG = "TAG_convert_units";
public static Convert_units_dialog newInstance() {
Convert_units_dialog frag = new Convert_units_dialog();
Bundle args = new Bundle();
args.putInt("title", R.string.change_units_dialog);
frag.setArguments(args);
return frag;
}
public Dialog onCreateDialog(Bundle savedInstanceState) {
int title = getArguments().getInt("title");
return new AlertDialog.Builder(getActivity())
.setTitle(title)
.setPositiveButton(R.string.convert, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i(TAG, "inside click listener");
convert_units();
//dismiss dialog here
Log.i(TAG, "Start dismiss");
dismiss();
Log.i(TAG, "End dismiss");
}
})
.setNegativeButton(R.string.dont_convert,null)
.create();
}
在我的 activity 中,我创建了一个调用 alertDialog 的函数。
private void open_alert_dialog() {
DialogFragment newFragment = Convert_units_dialog.newInstance();
newFragment.show(getFragmentManager(), "dialog");
Log.i(TAG,"open_alert_dialog finished");
}
当我 运行 我的代码时,我在日志中得到 "end dismiss" 并且从未看到 "open_alert_dialog finished" 所以我的 activity 中此命令后的代码不是 运行。有什么明显的我做错了吗?我已经尝试了很多我看到的建议,但 none 到目前为止都有效。
总的来说,我对编程有点陌生,如果有任何意见,我将不胜感激。谢谢
您的代码似乎是正确的,但请尝试一些操作,看看它是否解决:
- 检查 DialogFragment 和 AlertDialog 的导入,它们在 Activity 和 Convert_units_dialog. (如果您使用的是 appcompat-v7 库,则会显示其他导入选项)
- 在 setPositiveButton 上尝试调用 dialog.dismiss(); 而不是 dismiss();
为了给您一个准确的答案,我们需要一些信息,例如:
- convert_units(); 的实现是什么
- 你在 Activity 的哪个位置打电话给 open_alert_dialog()
最后,查看文档,我相信你已经在查看它了,但值得一试再读一遍:http://developer.android.com/reference/android/app/DialogFragment.html#AlertDialog
一个更新:
我想我误解了发生的事情,并通过文档弄明白了。我添加了对 doPositiveClick()
的方法调用我的新代码如下所示:
return new AlertDialog.Builder(getActivity())
.setTitle(title)
.setPositiveButton(R.string.convert, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i(TAG, "inside click listener");
convert_units();
//dismiss dialog here
((Settings)getActivity()).doPositiveClick();
}
})
.setNegativeButton(R.string.dont_convert,null)
.create();
}
然后我在我的 Activity 中创建了 doPositiveClick() 以及我期望在关闭 alertDialog 后 运行 的其余代码。
public void doPositiveClick() {
// Do stuff here.
Log.i("FragmentAlertDialog", "Positive click!");
display_maxes();
}
现在一切正常。