AlertDialog.Builder中的onClick方法似乎没有触发

时间:2016-11-02 18:26:16

标签: android onclick onclicklistener alertdialog

我正在构建以下警告对话框:

public class myActivity extends Activity {
       super.onCreate(savedInstanceState);

        ... /*Code to initialize intent*/

        AlertDialog.Builder builder = new AlertDialog.Builder(myActivity.this);
        builder.setMessage(R.string.launch_preference);
        builder.setPositiveButton(R.string.term_preference, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                intent.putExtra("launchType", "launchTerm");
                dialog.cancel();
                try { startActivity(intent); }
                catch (ActivityNotFoundException e) { showUpdateError(); }
                finish();
            }
        });
        builder.setNegativeButton(R.string.xterm_preference, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                intent.putExtra("launchType", "launchXTerm");
                dialog.cancel();
                try { startActivity(intent); }
                catch (ActivityNotFoundException e) { showUpdateError(); }
                finish();
            }
        });
        builder.create().show();
}

private void showUpdateError() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("myApp is attempting to launch myOtherApp. It is either missing or out of date Please update it and try again.");
    builder.setPositiveButton("Got it!", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
        }
    });
    builder.create().show();
}

运行此活动会显示警告对话框,但单击其中任一按钮只会导致应用关闭。

我正在使用新的意图将一系列应用迁移到新的生态系统,以便在它们之间进行通信。我们的想法是,如果myOtherApp尚未更新,第二个警报对话框将在第一个消失之后出现。不幸的是,在调试模式下甚至没有输入onClick方法。

2 个答案:

答案 0 :(得分:1)

启动活动后,您需要取消对话框。删除finish(),它会简单地杀死你的活动。

答案 1 :(得分:0)

将finish()放入try {}子句而不是之后;

try { startActivity(intent); finish()}