Як програмно натиснути кнопку назад в android?


78

У моєму додатку у мене є функція виходу. Якщо користувач натискає кнопку виходу, він переходить на головний екран. Зараз я виходжу з програми, натискаючи кнопку "Назад". Але що я хочу, це те, що мені потрібно вийти автоматично (тобто програмно) так само, як і функціональність кнопки повернення. Я знаю, що зателефонувавши до END () виконає цю функціональність. Але справа в тому, що вона переходить до попередньої діяльності.


Навіть якщо натиснути кнопку назад, буде показано попередню активність ...
Тарун

8
просто використовуйте finish ();
VJ

1
@Tarun Я використовую цей код, щоб очистити всю історію ExitActivity.this.finish (); Намір наміру1 = новий намір (ExitActivity.this, PinActivity.class); intent1.setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity (intent1);
vinothp

@ user1216003 ти на правильному шляху. ви зробите те саме, що кнопка "Назад" із встановленням прапора за наміром.
VJ

Відповіді:


121

onBackPressed()підтримується з: API рівня 5

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
        onBackPressed();
    }
}

@Override
public void onBackPressed() {
    //this is only needed if you have specific things
    //that you want to do when the user presses the back button.
    /* your specific things...*/
    super.onBackPressed();   
}

3
Який сенс у цьому? ви пишете, що робить android за замовчуванням. Він викликає onBackPress () при натисканні кнопки "Назад".
друлаби

3
@KKD, якщо вам доводиться підтримувати API нижче 5, тоді вам доведеться використовувати як вище .. android-developers.blogspot.co.uk/2009/12/…
Тарун

1
Тоді onBackPress - це добре ... Почніть свій ExitIntent всередині onBackPress ()
Тарун

1
Дякую за ваш коментар. Я не використовую кнопку "Назад". Я використовую кнопку виходу. Коли користувач натискає, він заповнює діалогове вікно із запитанням "Так" чи "Ні". Якщо так, він переходить на головний екран, де мені потрібно автоматично вийти, але я застряг там ... Це потрібно, тому що я використовую функцію будильника в моєму додатку .. коли коли-небудь будильник спливає повідомлення, на головний екран надходить його фон .. Отже, мені потрібно видалити його ось що я намагаюся ...
vinothp

У мене були проблеми з onBackPress () на деяких планшетах, як при аварії.
Демонік

42

Вам не потрібно перевизначати onBackPressed()- це вже визначено як дія, яку ваша діяльність буде виконувати за замовчуванням, коли користувач натисне кнопку "Назад". Тож просто телефонуйте, onBackPressed()коли хочете «програмно натискати» кнопку назад.

Однак це призвело б лише до finish()того, щоб викликати;)

Я думаю, вас бентежить те, що робить кнопка "Назад". За замовчуванням це просто виклик finish(), тому він просто виходить із поточної активності. Якщо у вас є щось за цією діяльністю, відобразиться екран.

Що ви можете зробити, це, запускаючи свою активність із Логіна, додайте прапорець CLEAR_TOP, щоб активності входу не було, коли ви вийдете з вашої.


Привіт, дякую за вашу відповідь .. Це звучить добре, але я спробував ваш підхід ще раз опинитися на тому самому екрані входу .. Не могли б ви допомогти мені в цьому ...
vinothp

1
Це правильна відповідь, але вам слід її відредагувати, оскільки це не завжди "просто дзвінок для завершення ()". У моєму випадку (і це працює точно так, як я маю намір) це спосіб переміщення назад через стек фрагментів і не викликає finish (), поки ви не дійдете до самого першого елемента в цьому стеку.
Євген Сімкін

9

Іноді корисно перевизначити метод onBackPress (), оскільки у випадку, якщо ви працюєте з фрагментами, і ви переходите між ними, якщо натиснути кнопку назад, вони повертаються до попереднього фрагмента.


1
Це точно правильно і заслуговує на більшу оцінку.
Євген Сімкін

5

Телефонуйте onBackPressedпісля того, як змінити його у своїй діяльності.


2
Дякуємо за коментар .. OnBackPress я можу вставити код при натисканні кнопки "Назад" .. Я хочу, щоб я хотів автоматично викликати кнопку "Назад" ... я зрозумів
vinothp

зробіть одне ... де б ви не хотіли зателефонувати, коли ви хочете зателефонувати, просто викличте цю функцію. ви можете зателефонувати йому всередині onCreate на основі прапора або будь-якої події, яку ви хочете.
друлаби

1

ви можете просто використовувати onBackPress ();

або якщо ви використовуєте фрагмент, ви можете використовувати getActivity (). onBackPress ()


0

Просто додайте finish (); у вашому першому класі '(вхід в систему) onPause (); метод. це все

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.