我创建了一个用于不同活动的AlertDialog片段。由于某种原因,警报不会被解除,主要活动中的代码不会继续。我输入了很多日志记录命令来查看它停止的确切位置。以下是我的提醒对话框:
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();
}
在我的活动中,我创建了一个调用alertDialog的函数。
private void open_alert_dialog() {
DialogFragment newFragment = Convert_units_dialog.newInstance();
newFragment.show(getFragmentManager(), "dialog");
Log.i(TAG,"open_alert_dialog finished");
}
当我运行我的代码时,我得到"结束解雇"在日志中,永远不会看到" open_alert_dialog已完成"所以我的活动中的这个命令后面的代码没有运行。有什么明显的我做错了吗?我已经尝试了很多我已经看过的建议,但到目前为止还没有任何建议。
我对一般的编程有点新意,并会欣赏任何输入。感谢。
答案 0 :(得分:1)
您的代码似乎是正确的,但请尝试一些事情,让我们看看它是否已解决:
为了给您一个准确的答案,我们需要一些信息,如:
最后,查看文档,我相信您已经在查看它,但是再次阅读它是值得的:http://developer.android.com/reference/android/app/DialogFragment.html#AlertDialog
答案 1 :(得分:1)
更新:
我想我误解了发生了什么,并且由于文档的原因,我已经弄明白了。我添加了一个方法调用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();
}
现在正在按预期工作。