У меня возникла та же проблема, и я нашел эту страницу, и хотя моя ситуация отличалась, я вызвал finish
из блока if
, прежде чем он определил окно предупреждения.
Таким образом, простой вызов dismiss
не сработает (поскольку это еще не было сделано), но после прочтения ответа Алексея Волового и понимания того, что это окно предупреждения, вызывает его. Я попытался добавить оператор возврата сразу после финиша внутри этого блока if
, и это устранило проблему.
Я думал, что как только ты позвонил финиш, он остановил все и тут же закончил, но это не так. Похоже, что он доходит до конца блока кода, в котором он завершается.
Итак, если вы хотите реализовать ситуацию, в которой иногда он завершается, прежде чем делать какой-то код, вы должны поместить оператор return сразу после завершения или он будет продолжать идти и действовать так, как если бы вызов вызывался в конец блока кода не там, где вы его назвали. Вот почему я получаю все эти странные ошибки.
private picked(File aDirectory){
if(aDirectory.length()==0){
setResult(RESULT_CANCELED, new Intent());
finish();
return;
}
AlertDialog.Builder alert= new AlertDialog.Builder(this); // Start dialog builder
alert
.setTitle("Question")
.setMessage("Do you want to open that file?"+aDirectory.getName());
alert
.setPositiveButton("OK", okButtonListener)
.setNegativeButton("Cancel", cancelButtonListener);
alert.show();
}
Если вы не поместите возврат сразу после того, как я вызвал финиш, он будет действовать так, как если бы вы назвали его после alert.show();
, и, следовательно, будет сказано, что окно просочилось после финиша сразу после того, как вы сделали Появится диалоговое окно, хотя это не так, но оно все еще думает.
Я думал, что добавлю это, поскольку здесь показано, что команда финиша действовала иначе, чем я думал, и я предположил, что есть другие люди, которые думали так же, как и я, прежде чем я обнаружил это.