Отключить кнопку назад в Android

334

Как отключить кнопку возврата в Android при выходе из приложения?

благодать
источник
1
Можете ли вы быть немного более ясным по этому вопросу? Если вы хотите перезаписать поведение кнопки «Назад» по умолчанию, обратитесь к этому вопросу здесь. stackoverflow.com/questions/2000102/…
Гопинатх
26
Пожалуйста, не делайте этого, если у вас нет веских причин, так как нарушение ожидаемой модели работы очень незначительно повреждает всю платформу
Hamy
14
Вы захотите сделать это, если вам придется иметь дело с глупым Samsung S4, где кнопка «назад» чувствительна к прикосновениям (не физическая), прямо на краю телефона, которая уже настолько чувствительна к прикосновениям, что ладонь, прислоненная к боковой поверхности, будет вернитесь назад.
чеснок
1
Это противоречит руководству по качеству и дизайну Android , роль UX-N1.
MiguelSlv

Ответы:

651

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

@Override
public void onBackPressed() {
   if (shouldAllowBack()) {
       super.onBackPressed();
   } else {
       doSomething();
   }
}
Gopinath
источник
12
Это намного лучше и чище, чем переопределение ключевых методов обработки, и имеет тот же эффект. Отличный ответ!
Ник Рейман
2
Отличное решение, чувак. Есть ли способ сделать это с помощью кнопки домой?
Датта Кунде
1
Это круто! Я на самом деле хотел всегда возвращаться к своей основной деятельности, когда отжимался от любой другой активности, и переопределение этого метода позволяет мне сделать это очень легко.
Джим
К сожалению, я забыл удалить super.onBackPressed ().
Аристо Майкл
173

Если вы ищете более высокий уровень API 2.0 и выше, это будет отлично работать

@Override
public void onBackPressed() {
    // Do Here what ever you want do on back press;
}

Если вы ищете Android API уровня до 1.6.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK) {
     //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
     return true;
     }
     return super.onKeyDown(keyCode, event);    
}

Запишите вышеуказанный код в свою активность, чтобы предотвратить нажатие кнопки «назад»

Javanator
источник
5
Этот метод более обратно совместим, чем использование onbackpressed из-за требования api-уровня
onbackpressed
5
Отличный ответ. Хотя мне это не нужно для моего проекта, я ценю, что вы предоставили как старые, так и новые методы. Это должно быть помечено как правильный ответ. +1
Джим
1
@Javanator второй не будет работать для меня (например, для API уровня 16), но первый работает как шарм
noloman
38

Вы можете сделать это простым способом. Не вызывайте super.onBackPressed ().

Примечание: - Не делайте этого до тех пор, пока у вас нет веских причин для этого.

@Override
public void onBackPressed() {
// super.onBackPressed();
// Not calling **super**, disables back button in current screen.
}
Иман Мараши
источник
6
Объяснение "почему бы и нет" было бы здорово. Спасибо.
почти новичок
Не звонить .super важно!
Ран
3
@almostabeginner, потому что не вызывая super, нарушит нормальное использование кнопки назад. пользователи будут волноваться, когда нормально работающая кнопка перестанет работать. они могут подумать, что приложение глючит или телефон работает со сбоями и т. д. Ваше приложение в конечном итоге станет виновником.
bengongon97
23

Просто переопределите метод onBackPressed () .

@Override
public void onBackPressed() { }
Панкай кумар
источник
13

Я использую это .............

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode==KeyEvent.KEYCODE_BACK)
        Toast.makeText(getApplicationContext(), "back press",      
     Toast.LENGTH_LONG).show();

    return false;
       // Disable back button..............
}
Махмудул Хак Хан
источник
9

Если вы хотите убедиться, что ваше клиентское приложение для Android вышло из системы с какого-либо сервера до того, как ваша активность будет уничтожена -> выйдите из службы со своим собственным потоком (это то, что вы должны делать в любом случае).

Отключение кнопки «назад» ничего не решит для вас. У вас все равно будет та же проблема, когда пользователь, например, получит телефонный звонок. Когда телефонный звонок получен, ваша активность имеет столько же шансов быть убитым, чем получить надежный ответ из сети.

Вот почему вы должны позволить службе ждать в своем потоке ответа от сети, а затем повторить попытку, если это не удастся. Служба Android не только намного менее вероятна, чтобы ее убили, прежде чем она получит ответ, но и если она действительно будет убита до завершения работы, то AlarmManager всегда может восстановить ее, чтобы попытаться снова.

Стефан Бранчик
источник
8

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

@Override
public void onBackPressed()
{

}

Или передайте текущую активность в метод onBackPressed ().

@Override
public void onBackPressed()
{
   startActivity(new Intent(this, myActivity.class));  
   finish();
}

Замените название требуемой активности на myActivity.

если вы используете фрагмент, то сначала вызовите метод callParentMethod ()

public void callParentMethod(){
    context.onBackPressed(); // instead of context use getActivity or something related
}

затем вызовите пустой метод

@Override
public void onBackPressed()
{

}
Закария Хоссейн
источник
6

если вы используете FragmentActivity. тогда делай так

Первый вызов Это внутри вашего Fragment.

public void callParentMethod(){
    getActivity().onBackPressed();
}

а затем вызовите onBackPressedметод в стороне вашего родительского FragmentActivityкласса.

@Override
public void onBackPressed() {
  //super.onBackPressed();
  //create a dialog to ask yes no question whether or not the user wants to exit
  ...
}
гашиш
источник
5

Просто с помощью этого кода: Если вы хотите отключить обратную связь, вы не используете super.OnBackPressed ();

@Override
public void onBackPressed() {

}
Седа Т.
источник
4

Если вы хотите отключить приложение во время выхода из системы, вы можете открыть диалоговое окно, которое нельзя отменить.

Тед Хопп
источник
4

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

@Override
public void onBackPressed() {
  //remove call to the super class
  //super.onBackPressed();
}
Аман Агарвал
источник
3

Вам просто нужно переопределить метод для кнопки назад. Вы можете оставить метод пустым, если хотите, чтобы при нажатии кнопки «назад» ничего не происходило. Пожалуйста, посмотрите на код ниже:

@Override
public void onBackPressed() 
{
   // Your Code Here. Leave empty if you want nothing to happen on back press.
}
Хаммад хан
источник
3

Помимо этих двух методов из ответа выше.

onBackPressed () (уровень API 5, Android 2.0)

onKeyDown () (Уровень API 1, Android 1.0)

Вы также можете переопределить dispatchKeyEvent()(API Level 1, Android 1.0) следующим образом:

dispatchKeyEvent() (Уровень API 1, Android 1.0)

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    // TODO Auto-generated method stub
    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
        return true;
    }
    return super.dispatchKeyEvent(event);
}
Крис Руф
источник
3

Отключить заднюю кнопку в Android

@Override
public void onBackPressed() {
    return;
}
Махеш Бохани
источник
2

Для меня просто переопределение onBackPressed()не сработало, но явно указало, с какого действия оно должно начинаться:

@Override
public void onBackPressed(){
  Intent intent = new Intent(this, ActivityYouWanToGoBack.class);
  startActivity(intent);
}
cheeroke
источник
1

Попробуй это:

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

   return true;
 }
   return super.onKeyDown(keyCode, event);    
}
Мохамад Шейхи
источник
1

снимаю super.onBackPressed()с public void onBackPressed()работы отлично. его проверено в Android 9

Golil
источник