Диалог закрытия 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 секунд после его показа?
Ответы
Ответ 1
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);
Ответ 2
Используйте 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();
Ответ 3
Это код, ссылка :
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....
}
});
}
}
СЧАСТЛИВЫЙ КОДИРОВАНИЕ!
Ответ 4
Поздно, но я думал, что это может быть полезно для тех, кто использует 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()
и он имеет эффект отмены таймера.
Ответ 5
AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
затем вызовите функцию "Сбросить работу"
alertDialog .dismiss();
Ответ 6
Я добавил автоматический увольнение с оставшимся временем, отображаемым в тексте положительной кнопки, на 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();
}
});