Android 即使未单击任何按钮且setcancelable为false,AlertDialog.Builder也会消失

Android 即使未单击任何按钮且setcancelable为false,AlertDialog.Builder也会消失,android,android-alertdialog,Android,Android Alertdialog,因此,我使用了一个警报对话框,它甚至不会持续5秒钟而不立即消失,尽管我不会点击任何东西,有人能帮忙吗 private void setAlarm(Calendar targetCal) { deleteCopy(); info.setText("\n\n***\n" + "Alarm is set @ " + targetCal.getTime() + "\n" + "***\n"); Intent intent =

因此,我使用了一个警报对话框,它甚至不会持续5秒钟而不立即消失,尽管我不会点击任何东西,有人能帮忙吗

 private void setAlarm(Calendar targetCal) {

    deleteCopy();

   info.setText("\n\n***\n"
            + "Alarm is set @ " + targetCal.getTime() + "\n"
            + "***\n");

    Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
    pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, 0);
    alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
 Intent alarmIIntent = new Intent(this, AlarmReceiver.class);
    Intent intent_ForResult = new Intent(TimeDateRem.this, MainActivity.class);
  startActivity(intent_ForResult);}

    public void deleteCopy() {
    Cursor cursor = dba.getnameofAlarm(title.getText().toString());
    if (cursor.moveToFirst()) {

            final DatabaseActivity dba= new DatabaseActivity(getApplicationContext());
            String titleData=(cursor.getString(cursor.getColumnIndex(Constants.COLUMN_NAME)));

            if(title.getText().toString().matches(titleData)) {
                AlertDialog.Builder builder = new AlertDialog.Builder(TimeDateRem.this);

                builder.setTitle("Set Alarm");

                builder.setMessage("By setting this alarm you will be deleting the previous one, is that OK?")
                        .setCancelable(false)
                        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {

                                dba.deleteAlarm(title.getText().toString().trim());
                            }
                        })
                        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                dialog.cancel();
                            }
                        });

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

            }


        cursor.close();
    }

deletecopy()从数据库中删除与当前创建的行同名的任何行。。。任何帮助都将不胜感激

我不知道这是否有效,但正如我在评论中所说,您必须将您的点击后逻辑移动到onclick侦听器

private void setAlarm(Calendar targetCal) {
    deleteCopyAsk(targetCal);
}

public void deleteCopyAsk(final Calendar targetCal) {
    Cursor cursor = dba.getnameofAlarm(title.getText().toString());
    if (cursor.moveToFirst()) {
        final DatabaseActivity dba = new DatabaseActivity(getApplicationContext());
        String titleData = (cursor.getString(cursor.getColumnIndex(Constants.COLUMN_NAME)));
        if (title.getText().toString().matches(titleData)) {
            AlertDialog.Builder builder = new AlertDialog.Builder(TimeDateRem.this);
            builder.setTitle("Set Alarm");
            builder.setMessage("By setting this alarm you will be deleting the previous one, is that OK?")
                    .setCancelable(false)
                    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {

                            dba.deleteAlarm(title.getText().toString().trim());

                            info.setText("\n\n***\n"
                                    + "Alarm is set @ " + targetCal.getTime() + "\n"
                                    + "***\n");

                            Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
                            pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, 0);
                            alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
                            alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
                            Intent alarmIIntent = new Intent(this, AlarmReceiver.class);
                            Intent intent_ForResult = new Intent(TimeDateRem.this, MainActivity.class);
                            startActivity(intent_ForResult);
                        }
                    })
                    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.cancel();
                        }
                    });
            AlertDialog alertDialog = builder.create();
            alertDialog.show();
        }
        cursor.close();
    }
}

您正在调用
setAlarm
,它会创建一个
对话框(在
deletecompy
中),然后启动
main活动。对话框由活动托管,当您切换活动时,对话框将消失。尝试在对话框的“确定”按钮上启动该活动。在我单击其中一个按钮之前,该对话框不应该保持不变吗?由于这个原因,我没有将setcancelable设置为false..我不希望代码继续运行。。我不能在那里开始活动,因为我需要intent@FranciscoM.No,对话框显示,执行继续,它不会在
deletecompy()上阻塞
alertDialog.show()。否则,用户界面将冻结。对话框将留在那里,并在单击发生时异步执行
OnClickListener
代码。setcancelable是指不让用户离开对话框,而不是阻止UI线程的执行。Ui线程永远不应该被阻止,因为它负责刷新屏幕上的视图。那么,我该怎么做才能保持alertdialog…有没有办法在我单击按钮之前暂停@方济会。