Отключить кнопку назад в Android - PullRequest
308 голосов
/ 24 января 2011

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

Ответы [ 16 ]

628 голосов
/ 24 января 2011

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

@Override
public void onBackPressed() {
   if (!shouldAllowBack()) {
       doSomething();
   } else {
       super.onBackPressed();
   }
}
160 голосов
/ 24 января 2011

Если вы ищете Android api level до 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);    
}

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

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

впишите этот код в свою активность, чтобы не нажимать кнопку возврата

29 голосов
/ 23 июля 2015

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

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

@Override
public void onBackPressed() {
// super.onBackPressed();
// Not calling **super**, disables back button in current screen.
}
21 голосов
/ 25 июня 2015

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

@Override
public void onBackPressed() { }
13 голосов
/ 27 марта 2014

Я им пользуюсь .............

 @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 голосов
/ 24 января 2011

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

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

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

8 голосов
/ 03 июня 2018

Просто переопределите метод 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 голосов
/ 16 декабря 2014

, если вы используете 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 голосов
/ 05 декабря 2017

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

@Override
public void onBackPressed() {

}
4 голосов
/ 24 марта 2018

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

@Override
public void onBackPressed() {
  //remove call to the super class
  //super.onBackPressed();
}
...