作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个 AlertDialog dlgDetails
,它显示在另一个 AlertDialog dlgMenu
中。如果用户按下 dlgDetails 中的后退按钮,我希望能够再次显示 dlgMenu,如果他在对话框外按下,则只需退出对话框。
我认为最好的方法是为 dlgDetails 覆盖 onBackPressed
,但我不知道该怎么做,因为必须使用 Builder 间接创建 AlertDialogs。
我正在尝试创建一个派生的 AlertDialog(public class AlertDialogDetails extends AlertDialog { ...}
),但我想我还必须在其中扩展 AlertDialog.Builder
类返回一个 AlertDialogDetails,但没有更简单的方法吗?如果没有,您将如何覆盖 Builder?
最佳答案
我终于在我的对话框中添加了一个键监听器来监听 Back 键。不像覆盖 onBackPressed()
那样优雅,但它可以工作。代码如下:
dlgDetails = new AlertDialog.Builder(this)
.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey (DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK &&
event.getAction() == KeyEvent.ACTION_UP &&
!event.isCanceled()) {
dialog.cancel();
showDialog(DIALOG_MENU);
return true;
}
return false;
}
})
//(Rest of the .stuff ...)
有关 Kotlin 的答案,请参见此处:Not working onbackpressed when setcancelable of alertdialog is false
关于Android:如何在 AlertDialog 中覆盖 onBackPressed()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7801971/
我是一名优秀的程序员,十分优秀!