Intereting Posts
Почему я не могу использовать «запустить Android lint» из меню «Окно» в Eclipse на панели инструментов, я могу запустить его, не так ли? Как проверить два действия с Robotium Intellij IDEA форматирование XML с выравниванием атрибутов MediaStore – Uri для запроса всех типов файлов (носителей и носителей) Шерлок Actionbar Пользовательский шрифт Исходный код ядра Android 4.0? Просмотр пейджера с универсальным загрузчиком изображений Android: Должен ли я обращаться к LicenseChecker каждый раз, когда приложение открывается? Как получить интерактивные гиперссылки в AlertDialog из строкового ресурса? Recyclerview внутри вложенного просмотра прокрутки, загружая все данные вместо вызова по одному изображению при прокрутке Фоновый стиль не отображается на панели прогресса Как настроить Google Cloud Messaging для Android? Конвертировать java.net.URI в android.net.Uri Невозможно получить доступ к WEB API с помощью ip: port, но может с localhost: порт во время отладки VS OnRegistered () из GCMIntentService никогда не вызывал

Диалог закрытия Android через 5 секунд?

Я работаю над приложением для доступа. Когда пользователь хочет покинуть приложение, я показываю диалог, в котором он должен подтвердить, что хочет уйти, если он не подтвердит через 5 секунд, диалог должен закрыться автоматически (так как пользователь, вероятно, случайно открыл его). Это похоже на то, что происходит в Windows при изменении разрешения экрана (появляется предупреждение и если вы его не подтверждаете, оно возвращается к предыдущей конфигурации).

Вот как я показываю диалог:

AlertDialog.Builder dialog = new AlertDialog.Builder(this).setTitle("Leaving launcher").setMessage("Are you sure you want to leave the launcher?"); dialog.setPositiveButton("Confirm", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int whichButton) { exitLauncher(); } }); dialog.create().show(); 

Как закрыть диалоговое окно через 5 секунд после его показа?

Solutions Collecting From Web of "Диалог закрытия Android через 5 секунд?"

 final AlertDialog.Builder dialog = new AlertDialog.Builder(this).setTitle("Leaving launcher").setMessage("Are you sure you want to leave the launcher?"); dialog.setPositiveButton("Confirm", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int whichButton) { exitLauncher(); } }); final AlertDialog alert = dialog.create(); alert.show(); // Hide after some seconds final Handler handler = new Handler(); final Runnable runnable = new Runnable() { @Override public void run() { if (alert.isShowing()) { alert.dismiss(); } } }; alert.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { handler.removeCallbacks(runnable); } }); handler.postDelayed(runnable, 10000); 

Используйте CountDownTimer для достижения.

  final AlertDialog.Builder dialog = new AlertDialog.Builder(this) .setTitle("Leaving launcher").setMessage( "Are you sure you want to leave the launcher?"); dialog.setPositiveButton("Confirm", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int whichButton) { exitLauncher(); } }); final AlertDialog alert = dialog.create(); alert.show(); new CountDownTimer(5000, 1000) { @Override public void onTick(long millisUntilFinished) { // TODO Auto-generated method stub } @Override public void onFinish() { // TODO Auto-generated method stub alert.dismiss(); } }.start(); 

Это код, ссылайтесь на эту ссылку :

 public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // get button Button btnShow = (Button)findViewById(R.id.showdialog); btnShow.setOnClickListener(new View.OnClickListener() { //on click listener @Override public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext()); builder.setTitle("How to close alertdialog programmatically"); builder.setMessage("5 second dialog will close automatically"); builder.setCancelable(true); final AlertDialog closedialog= builder.create(); closedialog.show(); final Timer timer2 = new Timer(); timer2.schedule(new TimerTask() { public void run() { closedialog.dismiss(); timer2.cancel(); //this will cancel the timer of the system } }, 5000); // the timer will count 5 seconds.... } }); } } 

СЧАСТЛИВЫЙ КОДИРОВАНИЕ!

Поздно, но я думал, что это может быть полезно для тех, кто использует RxJava в своем приложении.

RxJava поставляется с оператором с именем .timer() который создаст Observable, который будет onNext() только один раз после заданной продолжительности времени, а затем вызывает onComplete() . Это очень полезно и не позволяет создавать обработчик или Runnable.

Более подробную информацию об этом операторе можно найти в документации ReactiveX

 // Wait afterDelay milliseconds before triggering call Subscription subscription = Observable .timer(5000, TimeUnit.MILLISECONDS) // 5000ms = 5s .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<Long>() { @Override public void call(Long aLong) { // Remove your AlertDialog here } }); 

Вы можете отменить поведение, вызванное таймером, путем отмены подписки на наблюдаемое нажатием кнопки. Поэтому, если пользователь вручную закрывает оповещение, вызовите subscription.unsubscribe() и это приведет к отмене таймера.

 AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); 

Затем назовите убрать мет

 alertDialog .dismiss(); 

Я добавил автоматический сброс с оставшимся временем, отображаемым в тексте положительной кнопки, на AlertDialog .

 AlertDialog dialog = new AlertDialog.Builder(getContext()) .setTitle(R.string.display_locked_title) .setMessage(R.string.display_locked_message) .setPositiveButton(R.string.button_dismiss, null) .create(); dialog.setOnShowListener(new DialogInterface.OnShowListener() { @Override public void onShow(DialogInterface dialog) { final Button positiveButton = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE); final CharSequence positiveButtonText = positiveButton.getText(); new CountDownTimer(AUTO_DISMISS_MILLIS, 100) { @Override public void onTick(long millisUntilFinished) { positiveButton.setText(String.format(Locale.getDefault(), "%s (%d)", positiveButtonText, TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) + 1)); } @Override public void onFinish() { dismiss(); } }.start(); } });