#android #button #timeout #visibility #android-alertdialog
#Android #кнопка #тайм-аут #видимость #android-alertdialog
Вопрос:
У меня появляется всплывающее окно с предупреждением, которое я показываю при запуске моего приложения. Я хочу, чтобы пользователь прочитал это, поэтому я хочу отключить кнопку продолжения на 5 секунд, затем включить ее, чтобы пользователь мог продолжить.
if (alertDialog == null) {
alertDialog = new AlertDialog.Builder(this).setPositiveButton("Continue",
new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//continue with the app
}
}).create();
alertDialog.setTitle("My Title");
alertDialog.setView(myView);
}
if ((!alertDialog.isShowing())) {
alertDialog.show();
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
}
После установки кнопки в значение false я не могу вернуть ей значение true. Я попытался использовать Thread.sleep (5000l) и создать свой собственный диалог. Ни один из них не сработал. Как я могу добиться своей цели?
Спасибо, Акаш
Ответ №1:
Все элементы пользовательского интерфейса отображаются на одном дыхании после завершения обратного вызова из пользовательского кода. Вот почему простое добавление задержки не помогает.
Возможно, вы захотите запустить поток или, AsyncTask
где doInBackground
метод ведет обратный отсчет (вероятно, в цикле, чтобы вы могли отобразить счетчик в поле ok), а затем в onPostExecute
включить кнопку
Псевдокод:
MyAsyncTask extends AsyncTask {
doInBackground() {
for (int i = 5; i > 0 ; i ) {
publishProgress (i );
Thread.sleep(1000);
}
}
onProgressUpdate(int i ) {
okButton.setText(i);
}
onPostExecute() {
okButton.setText("Ok");
okButton.enable();
}
}
Комментарии:
1. Спасибо, это работает как по волшебству. Однако есть ли какой-либо способ выполнить AsyncTask несколько раз? Это отлично работает, когда пользователь запускает игру, он читает всплывающее окно. Но в промежутке, если он заходит в главное меню и снова запускает игру (фактически не выходя из игры), кнопка продолжения отображается напрямую. Если я вызываю myAsyncTask.execute() в методе onClick, он выдает исключение с сообщением (задача может быть выполнена только один раз). Есть ли какой-нибудь способ запустить задачу несколько раз? Спасибо
2. Да, просто каждый раз создавайте новую MyAsyncTask:
new MyAyncTask().execute();
3. ahh nevermind решил это, вместо того, чтобы вызывать new MyAsyncTask().execute, я вызывал его из экземпляра. Итак, теперь все хорошо и исправлено. Большое спасибо, Хейко.
4. аааа, я тоже не обновил страницу, виноват. В итоге получилось то же самое.