2012-04-25 3 views
2

В некоторых приложениях (например, в Dolphin HD Browser) реализована следующая функция:Как реализовать функцию «Нажмите снова, чтобы выйти»?

Нажатие кнопки «Назад» возвращается в задний стек. Когда отображается начальный вид/активность/фрагмент, и вы нажимаете «Назад», появляется Toast, говорящий «Нажмите« Назад снова, чтобы выйти »или что-то подобное.

Как я могу реализовать эту функцию?

+0

Посмотрите на сайте разработчика, его четко определены. – JoxTraex

+0

@JoxTraex: Спасибо, я знаю о сайте разработчика, и я также знаю, как влиять на задний стек. Я просто подумал, что это какая-то встроенная функция. –

+0

@ThorstenDittmar Ваш вопрос не означает, что (о встроенной функции). Вы спросили «как реализовать ...». –

ответ

2

Поймать событие назад кнопки следующим образом:

public void onBackPressed() 
{ 
    //Add your logic here 
    return; 
} 

Теперь создайте флаг так, ваше приложение не будет закрывать первый раз, когда он стреляет. Наконец, завершите свою деятельность, позвонив по телефону finish();.

Для быстро показывая Тосты использовать это:

Toast.makeText(this, "Press Back again to quit", Toast.LENGHT_SHORT).show(); 

При условии, что вы запускаете этот код из вашего класса активности. Если нет, попробуйте получить контекст своей активности вместо использования this.

+0

Спасибо. Я знаю, как показать «Toast», мне просто интересно, была ли эта функция встроенной (включается, например, через флаг в манифесте). –

+0

Нет проблем! Не думаю, что Google когда-нибудь создаст что-то подобное в Android, хотя это полезная функция для некоторых приложений, она нарушает правило по умолчанию о том, как работают приложения/действия *. – Pieter888

+1

Это правда, хотя я считаю это особенно полезным, например, для веб-браузера, где нажатие кнопки «Назад» возвращается в историю веб-сайтов. –

2

Для уровня API 1 переопределение активность-х

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
    .... 

Для уровня API 5 и выше посмотреть, что сказал Pieter888.

7

На вершине в классе:

int count = 0; 

В теле вашего класса:

public void onBackPressed() 
{ 
    if(count == 1) 
    { 
     count=0; 
     finish(); 
    } 
    else 
    { 
     Toast.makeText(getApplicationContext(), "Press Back again to quit.", Toast.LENGTH_SHORT).show(); 
     count++; 
    } 

    return; 
} 
+0

Я думаю, вы хотите поставить 'count ++;' внутри 'else' -класса оператора' if (count == 1) '. – Pieter888

+0

no put outside не нужно помещать count ++ внутри else –

+2

Но если значение по умолчанию 'count' равно' 0'. Когда пользователь нажмет кнопку «Назад», он сначала выполнит «count ++;», поэтому теперь значение «1», затем проверяет, равно ли значение «count» равно «1», это всегда верно и действие вызовет 'отделка()'. Или я вообще что-то пропущу? – Pieter888

Смежные вопросы