Android - Подтвердите выход приложения с помощью тоста
Я новичок в разработке Android, и я хочу, чтобы это было, когда пользователь нажимает кнопку "Назад" на основной операции, появляется сообщение тоста с сообщением "подтвердить выход, нажав кнопку назад снова". Как мне это сделать? Это то, что у меня есть до сих пор:
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
Toast s = Toast.makeText(getBaseContext(), "Press back again to exit", Toast.LENGTH_LONG);
s.show();
wait();
public boolean onBackPressed() {
finish();
}
}
Ответы
Ответ 1
Я бы просто сохранил время нажатия, а затем сравнил время последнего нажатия с новым нажатием.
long lastPress;
@Override
public void onBackPressed() {
long currentTime = System.currentTimeMillis();
if(currentTime - lastPress > 5000){
Toast.makeText(getBaseContext(), "Press back again to exit", Toast.LENGTH_LONG).show();
lastPress = currentTime;
}else{
super.onBackPressed();
}
}
Вы также можете отклонить тост, когда приложение подтвердит обратное нажатие (cred @ToolmakerSteve):
long lastPress;
Toast backpressToast;
@Override
public void onBackPressed() {
long currentTime = System.currentTimeMillis();
if(currentTime - lastPress > 5000){
backpressToast = Toast.makeText(getBaseContext(), "Press back again to exit", Toast.LENGTH_LONG);
backpressToast.show();
lastPress = currentTime;
} else {
if (backpressToast != null) backpressToast.cancel();
super.onBackPressed();
}
}
Ответ 2
private long mLastPress = 0;
const int TOAST_DURATION = 5000;
Toast onBackPressedToast;
@Override
public void onBackPressed() {
long currentTime = System.currentTimeMillis();
if (currentTime - mLastPress > TOAST_DURATION) {
onBackPressedToast = Toast.makeText(this, R.string.press_once_again_to_exit, Toast.LENGTH_SHORT);
onBackPressedToast.show();
mLastPress = currentTime;
} else {
if (onBackPressedToast != null) {
onBackPressedToast.cancel(); //Difference with previous answer. Prevent continuing showing toast after application exit.
onBackPressedToast = null;
}
super.onBackPressed();
}
}
Ответ 3
отлично работает в моем случае
private static long back_pressed;
@Override
public void onBackPressed()
{
if (back_pressed + 2000 > System.currentTimeMillis())
super.onBackPressed();
else
Toast.makeText(getBaseContext(), "Press once again to exit!", Toast.LENGTH_SHORT).show();
back_pressed = System.currentTimeMillis();
}
Ответ 4
В более новой версии вы можете использовать закусочную вместо тоста.
import android.support.design.widget.Snackbar;
...
Snackbar.make(content, "Click BACK again to exit", Snackbar.LENGTH_SHORT).setAction("Action", null).show();
...
Ответ 5
После того, как много раз повторять одно и то же поведение, решили пойти на создание библиотеки для нее: DoubleBackPress Android Library
. Он предоставляет множество простых в использовании шаблонов и поведение двойного обратного давления без всяких хлопот.
Просто выполните:
// set the ToastDisplay to be shown on FirstBackPress
FirstBackPressAction firstBackPressAction = new ToastDisplay().standard(this);
// set the Action on DoubleBackPress
DoubleBackPressAction doubleBackPressAction = new DoubleBackPressAction() {
@Override
public void actionCall() {
finish();
}
};
// setup DoubleBackPress behaviour
DoubleBackPress doubleBackPress = new DoubleBackPress()
.withDoublePressDuration(3000)
.withFirstBackPressAction(firstBackPressAction)
.withDoubleBackPressAction(doubleBackPressAction);
Наконец, переопределите поведение onBackPressed с DoubleBackPress для обратного пресса.
@Override
public void onBackPressed() {
doubleBackPress.onBackPressed();
}
Пример GIF для аналогичного поведения
Ответ 6
Лучшее и простое решение с тостом
На яве
private Toast exitToast;
@Override
public void onBackPressed() {
if (exitToast == null || exitToast.getView() == null || exitToast.getView().getWindowToken() == null) {
exitToast = Toast.makeText(this, "Press again to exit", Toast.LENGTH_LONG);
exitToast.show();
} else {
exitToast.cancel();
finish();
}
}
В котлине
private var exitToast: Toast? = null
override fun onBackPressed() {
if (exitToast == null || exitToast!!.view == null || exitToast!!.view.windowToken == null) {
exitToast = Toast.makeText(this, "Press again to exit", Toast.LENGTH_LONG)
exitToast!!.show()
} else {
exitToast!!.cancel()
finish()
}
}