gpt4 book ai didi

android - 为什么 android dialog.dismiss 从未调用过?

转载 作者:行者123 更新时间:2023-11-30 01:38:40 25 4
gpt4 key购买 nike

我在我的应用程序中实现了带有接受和拒绝按钮的自定义对话框。除非用户在 7 秒内单击其中一个按钮,否则将触发 dismiss 方法。如果用户在 7 秒内的任何时间单击但从未触发 dismiss 方法,我想关闭该对话框。我搜索了所有 SO 但我没有从答案中找到解决方案。

final Dialog d = new Dialog(MyActivity.this, R.style.Theme_Dialog);
d.setContentView(R.layout.dialog_layout);
d.show();

spRequest.play(spSoundId, 1, 1, 1, 12, 1);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//dia.dismiss();
d.dismiss();
}
}, 7000); //the alert will play for 7 seconds and stop

Button accept = (Button) d.findViewById(R.id.acpt);
accept.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
d.dismiss();
spRequest.release();
}
});

Button reject = (Button) d.findViewById(R.id.rjct);
reject.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
d.dismiss();
spRequest.release();
msg.setText("");
}
});

更新:经过一些调试和研究后,我注意到如果我点击按钮两次,对话框就会消失。我猜对话框被绘制了两次。我还在努力。就像@aelimill 所说的那样,这段代码在从 Activity 主体调用时工作正常(我在 OnCreate() 中尝试过)但是当我在广播接收器中执行它时出现了问题。

最佳答案

通常,您重写对话框按钮的 onClick 方法以关闭它们,而不是对话框外的按钮:

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setMessage("MyMessage");

alertDialogBuilder.setPositiveButton("yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
//do something
}
});

alertDialogBuilder.setNegativeButton("No",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
alertdialog.cancel();
//or alertdialog.dismiss();
}
});

AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();

关于android - 为什么 android dialog.dismiss 从未调用过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34800888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com