【问题标题】:How to add alert dialog onKeyDown?如何在KeyDown上添加警报对话框?
【发布时间】:2013-01-22 17:11:22
【问题描述】:

我的应用程序中有此代码

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {


        Intent a = new Intent(this,a_stages.class);
        a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(a);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}       

现在我想添加一个警告对话框,询问用户他/她是否想去,例如在另一个页面上,如果用户点击是,它将意图进入特定页面,如果用户点击取消,dialog.cancel();.

编辑 我尝试了这段代码,但在“Intent a = new Intent(this,a_stages.class);”行出现错误上面写着“构造函数 Intent(new DialogInterface.OnClickListener(){}, Class) 未定义”

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {

        AlertDialog.Builder alertDialog = new AlertDialog.Builder(bq1.this);

        // Setting Dialog Title
        alertDialog.setTitle("Go back to home");

        // Setting Dialog Message
        alertDialog.setMessage("Are you sure you want to go back to home?");



        // Setting Positive "Yes" Button
        alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int which) {

                 Intent a = new Intent(this,a_stages.class);
                a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(a);
            }
        });

        // Setting Negative "NO" Button
        alertDialog.setNegativeButton("NO", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            // Write your code here to invoke NO event

            dialog.cancel();
            }
        });

        // Showing Alert Message
        alertDialog.show();


    }
    return super.onKeyDown(keyCode, event);
}       

【问题讨论】:

    标签: android


    【解决方案1】:

    如此接近!按下返回键时需要使用return false,否则使用return super.onKeyDown()。像这样:

    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // Dialog code
        return false;
    }
    return super.onKeyDown(keyCode, event);
    

    (如果您只想听返回键,也可以覆盖onBackPressed()。)

    【讨论】:

      【解决方案2】:

      Intent a = new Intent(this,a_stages.class); 中,this 指的是您的匿名点击监听器。您需要显式引用包含类,例如

      Intent a = new Intent(MyActivity.this,a_stages.class); 
      

      MyActivity 是此代码所在活动的名称。

      【讨论】:

      • +1 我错过了那条评论,看起来bq1.this 可以。我的答案仍然有效,所以我会保留它。
      • @Sam 同意了。他需要在您的答案中返回以避免发生默认的onBackPressed 调用。
      猜你喜欢
      • 2012-04-03
      • 2019-12-11
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      相关资源
      最近更新 更多