Android 即使未单击任何按钮且setcancelable为false,AlertDialog.Builder也会消失
因此,我使用了一个警报对话框,它甚至不会持续5秒钟而不立即消失,尽管我不会点击任何东西,有人能帮忙吗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 =
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…有没有办法在我单击按钮之前暂停@方济会。