【问题标题】:How to close activity with alert dialog when back press?后按时如何使用警报对话框关闭活动?
【发布时间】:2014-03-14 09:53:19
【问题描述】:

我正在打开警报对话框活动。一切都很好,唯一的问题是当用户在 AndroidCommand 活动中按下返回 - 警报对话框完美打开,但是当再次按下返回按钮时 - 只是关闭对话框,而不是对话框活动。因此,它需要两次后按才能返回 AndroidCommand 活动。取消对话框时如何关闭带有活动的对话框?

public class AndroidCommand extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

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

            Intent intent = new Intent(AndroidCommand.this, MainActivity.class);
            startActivity(intent);
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final String items[] = {"Movie","Music","Book"};
        AlertDialog.Builder ab=new AlertDialog.Builder(MainActivity.this);
        ab.setTitle("Dialog Title");
        ab.setItems(items, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface d, int choice) {
                if(choice == 0) {

                }
                else if(choice == 1) {

                }
                else if(choice == 2) {

                }
            }
        });
        ab.show();
    }

【问题讨论】:

  • finish(); // 调用一次

标签: android


【解决方案1】:

这里是完整的解决方案

    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
        if (!isBack)
            showDialog();
        else
            isBack = true;
        return true;
    }
    else
        return super.onKeyDown(keyCode, event);
}

 只需在 oncreatemethod 中初始化 isBack =false

    void showDialog () {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Alert");
    builder.setMessage("Are you sure you want to exit?");
    builder.setPositiveButton("OK", new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {


            finish();
        }
    });

    builder.setNegativeButton("Cancel", new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            isBack = false;
        }
    });
    builder.show();
}

【讨论】:

  • 但是 ap 进入 public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK)) { 在第二次返回 rpess 不是第一次第一次只显示 dailog 当我当我第二次单击 hen dailog close 时,仅单击返回 dailog 删除
  • 有 Override 方法,你也可以使用该方法 public void onBackPressed() { // TODO 自动生成的方法存根 super.onBackPressed(); }
  • @user3416078 像这样发布了我的答案更改
【解决方案2】:

打电话

finish()

后按方法

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

    finish();
    return true;

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

【讨论】:

    【解决方案3】:

    只是覆盖,

          @Override
    public void onBackPressed() {
        // TODO Auto-generated method stub
    //  super.onBackPressed();
    
    
     new AlertDialog.Builder(this)
                .setTitle("Dictation Alert")
                .setIcon(R.drawable.galleryalart)
                .setMessage("Do You want save dictation??")
                .setNegativeButton(android.R.string.no, new OnClickListener() {
    
                    @Override
                    public void onClick(DialogInterface dialog, int          which)    {
    
          //do other stuff here      
            finish()
        }
          })
     .setPositiveButton("yes", new OnClickListener() {
    
      //do other stuff here      
      finish()
       }).show
       }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      相关资源
      最近更新 更多