我正在创建一个自定义对话框,其中包含一个图形,一些我使用setMessage()动态修改的文本和一个标有' OK'的按钮,当按下时,应该解雇对话并做一些家务。我的代码如下所示:
// Shows the number of letters correct in the current guess.
wdsBuilder = new AlertDialog.Builder(this);
inflater = this.getLayoutInflater();
dialogView = inflater.inflate(R.layout.box_dialog3, null);
dialogView.setBackgroundColor(Color.TRANSPARENT);
alertTextView = (TextView)dialogView.findViewById(R.id.text);
wdsBuilder.setView(dialogView).setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whichButton) {
wdsAlert.dismiss();
if (playTimer != null) playTimer.cancel();
}
});
wdsAlert = wdsBuilder.create();
非常标准;事实上,我几乎逐字逐句地提起它https://developer.android.com/guide/topics/ui/dialogs.html。对话框显示正确,当我按“确定”时它被解雇了,但是当我在wdsAlert.dismiss()放置一个断点时,断点没有被击中。任何人都知道发生了什么?
答案 0 :(得分:1)
您可以写dialog.dismiss();
而不是wdsAlert.dismiss();
答案 1 :(得分:0)
如果要在点击时关闭对话框,请尝试此操作:
wdsBuilder.setView(dialogView).setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
}
});
答案 2 :(得分:0)
您无需点击按钮即可拨打Component
。它的AlertDialog的默认行为。使用如下,并检查。
dismiss()
如果您不想忽略onClick的PositiveButton上的对话框,则需要覆盖其行为。请查看This thread。
答案 3 :(得分:0)
如果breackPoint不起作用,请尝试清理项目,但这是我的Dialog对我有用:
final Dialog dialogAnomalias;
dialogAnomalias = new Dialog(MainActivity.this);
dialogAnomalias.setContentView(R.layout.content_main);
dialogAnomalias.setTitle("Captura");
dialogAnomalias.setCancelable(false);
WindowManager.LayoutParams lp = setDialogLayoutParams(dialogAnomalias);
lecturaAnomalia = (EditText) dialogAnomalias.findViewById(R.id.etLectura);
comentariosAnomalia = (EditText) dialogAnomalias.findViewById(R.id.etObservaciones);
Button btnAceptar = (Button) dialogAnomalias.findViewById(R.id.btnAceptar);
Button btnCancelar = (Button) dialogAnomalias.findViewById(R.id.btnCancelar);
btnAceptar.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
}
});
btnCancelar.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dialogAnomalias.dismiss();
}
});
dialogAnomalias.show();
dialogAnomalias.getWindow().setAttributes(lp);
和对话框的这种方法:
public WindowManager.LayoutParams setDialogLayoutParams(Dialog dialog) {
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(dialog.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
return lp;
}
答案 4 :(得分:0)
感谢您的所有建议,但我找到了一种不需要处理点击事件的解决方法。
刚才,我偶然发现了解决方案:在代码的其他地方,我在构建器上调用了setButton(),这是按下按钮,而不是调用setPositiveButton()。
答案 5 :(得分:0)
你必须使用
wdsBuilder.setView(dialogView).setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
if (playTimer != null) playTimer.cancel();
} });
不是
wdsBuilder.setView(dialogView).setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialog, int whichButton) {
wdsAlert.dismiss();
if (playTimer != null) playTimer.cancel();
} });
因为你将它作为参数传递给onClick函数 ....
如果您对此类错误感到震惊,请使用烤面包或小吃店来跟踪错误