Androidで戻るボタンを無効にする


334

アプリケーションをログアウトするときにAndroidの戻るボタンを無効にする方法は?


1
質問についてもう少し明確にできますか?戻るボタンのデフォルトの動作を上書きしたい場合は、この質問をここで参照してください。stackoverflow.com/questions/2000102/...
ゴピナス

26
正当な理由がない限り、これを行わないでください。予想される動作モデルを破ると、プラットフォーム全体がわずかに
傷つき

14
スマートフォンの端で、戻るボタンがタッチに反応する(物理的ではない)愚かなサムスンS4に対処する必要がある場合は、これを実行する必要があります。戻る。
ニンニク

1
それは反対しているAndroidの品質とデザインガイド、役割UX-N1。
MiguelSlv

回答:


651

onBackPressedメソッドをオーバーライドし、デバイスの戻るボタンを処理するつもりなら何もしません。

@Override
public void onBackPressed() {
   if (shouldAllowBack()) {
       super.onBackPressed();
   } else {
       doSomething();
   }
}

12
これは、キー処理メソッドをオーバーライドするよりもはるかに優れており、同じ効果があります。正解です。
Nik Reiman、

2
素晴らしいソリューション男。ホームボタンでこれを行う方法はありますか?
ダッタクンデ

1
これは素晴らしい!実際には、他のアクティビティから押し戻されたときは常にメインのアクティビティに戻りたいと思っていました。このメソッドをオーバーライドすると、非常に簡単に行うことができます。
ジム

おっと、super.onBackPressed()を削除するのを忘れました。
アリストマイケル

173

より高いAPIレベル2.0以上を探している場合、これはうまくいきます

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

1.6までのAndroid APIレベルを探している場合。

@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);    
}

上記のコードをアクティビティに記述して、戻るボタンが押されないようにします


5
このメソッドは、onbackpressedのAPIレベル要件のため、onbackpressedを使用するより下位互換性があります
AndrewPK

5
すばらしい答えです。私のプロジェクトでは必要ありませんが、古い方法と新しい方法の両方を提供していただきありがとうございます。これは正解としてマークする必要があります。+1
ジム

1
@Javanator 2番目のものは私には機能しませんが(たとえばAPIレベル16の場合)、最初の1つは魅力的なように機能します
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


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();
}

requireアクティビティ名を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

上記の回答からこれら2つの方法を分けてください。

onBackPressed()(APIレベル5、Android 2.0)

onKeyDown()(APIレベル1、Android 1.0)

このようにdispatchKeyEvent()(APIレベル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);
}


2

私にとっては、オーバーライドするだけでonBackPressed()は機能しませんでしたが、どのアクティビティを開始するかを明示的に指定するとうまくいきました:

@Override
public void onBackPressed(){
  Intent intent = new Intent(this, ActivityYouWanToGoBack.class);
  startActivity(intent);
}

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でテスト済み

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.