2013-08-20 2 views
37

Можно ли переопределить onBackPressed() только для одного действия?Android Overriding onBackPressed()

Нажмем кнопку «Назад». Я хочу вызвать диалог для определенного действия, но во всех других действиях я хочу, чтобы он работал так, как он работал раньше (переход к предыдущим действиям). , ,

Спасибо за ваших собеседников заранее.

EDITED

Спасибо всем за ваши anwsers, я уже все, как вы сказали мне, но моя проблема в том, что, когда я щелкал назад кнопку на другую операцию, я собирался моей предыдущей деятельности (Тот, в котором у меня была кнопка «Оверриден»), и я подумал, что это не работает, я думал, что это переопределяет onBackPressed() в целом приложении, теперь я получил его: D

+0

[см здесь] (HTTP: // StackOverflow.com/a/3142471/2345913) – CRUSADER

+1

Обновилась эта страница, чтобы повысить «просмотренный» счет до 50 000 – suku

ответ

107

Да. Только переопределить его в том, что один Activity с

@Override 
public void onBackPressed() 
{ 
    // code here to show dialog 
    super.onBackPressed(); // optional depending on your needs 
} 

не поместить этот код в любой другой Activity

+1

Как выше код работает во фрагменте? Является ли это любыми решениями –

+0

привет, у меня такая же проблема, моя активность 2 продолжается, но я не хочу идти на активность 1, если я нажал на активность 2, мое приложение должно выйти. Как я могу это сделать ? –

+0

@Tabishkhan просто называет 'finish()' в действии 1 после начала намерения для действия 2. Тогда активность 2 будет единственной в стеке – codeMagic

2

Просто вызовите метод onBackPressed() в своей деятельности хотите показать диалог, и внутри него вы увидите свое диалоговое окно.

31

Override метод onBackPressed() согласно примеру по codeMagic, и удалить вызов super.onBackPressed();, если вы этого не сделаете необходимо выполнить действие по умолчанию (завершение текущей операции).

+12

+1 для объяснения того, что super.onBackPressed() делает – erdomester

0

Лучший и самый общий способ контролировать музыку, чтобы создать мать активность, в которой вы переопределять startActivity(Intent intent) - в нем вы положили shouldPlay=true, и onBackPressed() - в нем вы положили shouldPlay = true. 10 - в этом вы помещаете условный mediaPlayer.stop с shouldPlay как условие

Затем просто увеличивайте активность матери во всех других действиях, и дублирование кода не требуется.

4

Вы можете просто позвонить onBackPressed(), и если вы хотите какой-либо деятельности, чтобы отобразить после кнопки возврата вы должны упомянуть

Intent intent = new Intent(ResetPinActivity.this, MenuActivity.class); 
    startActivity(intent); 
    finish(); 

, который работал для меня.

0

Сначала вы должны учитывать, что, если ваша деятельность, которую я назвал А расширяет другой активности (В) и в обоих

их вы хотите использовать onbackpressed функцию, то каждый код есть в B работает в тоже. Поэтому, если вы хотите отделить их, вы должны их разделить. Это означает, что A не должен расширять B, тогда вы можете иметь onbackpressed отдельно для каждого из них.

0

Попробуйте это его рабочих

@Override 
public void onBackPressed(){ 
     super.onBackPressed(); 
     Intent i=new Intent(Intent.ACTION_MAIN); 
     i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     finish(); 
} 
0

Просто используйте следующий код инициализации поля

private int count = 0; 
    @Override 
public void onBackPressed() { 
    count++; 
    if (count >=1) { 
     /* If count is greater than 1 ,you can either move to the next 
     activity or just quit. */ 
     Intent intent = new Intent(ResetActivity.this, LoginActivity.class); 
     startActivity(intent); 
     finish(); 
     overridePendingTransition 
     (R.anim.push_left_in, R.anim.push_left_out); 
     /* Quitting */ 
     finishAffinity(); 
    } else { 
     Toast.makeText(this, "Press back again to Leave!", Toast.LENGTH_SHORT).show(); 

     // resetting the counter in 2s 
     Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       count = 0; 
      } 
     }, 2000); 
    } 
    super.onBackPressed(); 
} 
Смежные вопросы