99

ハードキーの戻るボタンではなく、アクションバーのアクティビティの戻るボタンをカスタマイズしたい。onBackPressed()メソッドをオーバーライドしました。エミュレータの戻るボタンでは機能しますが、アクション バーの戻るボタンでは機能しません。

アクションバーで実現したい。これどうやってするの?

これが私のコードです:

@Override
public void onBackPressed() {
    Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show(); 
    return;
}

バックプレスが機能しているかどうかにかかわらず、このトーストを使用しましたが、実際の実装は以前のアクティビティに戻るように変更されます。しかし、これはアクションバーの上にあるボタン(アクティビティのタイトル以外)では機能しません。

誰でも私に問題を指定してください。

4

10 に答える 10

217

ホームボタンのクリック操作を上書きしたいと思います。アクティビティでこのようにこの機能をオーバーライドできます。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show(); 
        break;
    }
    return true;
}
于 2013-01-21T11:38:46.137 に答える
10

ユーザーは戻るボタンを押すか、アクションバーのホームボタンを押すことができることに注意してください。
したがって、彼を同じ宛先にリダイレクトしたい場合は、これを行うことができます.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
    }
    return false;
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
    startActivity(intent);
    finish();
}

これにより、ユーザーはキーまたはアクション バー ボタンのいずれかを押す意図に移動します。

于 2015-08-13T16:14:25.827 に答える
9

申し訳ありませんが、回答が遅くなりましたが、同じ質問でこのページにたどり着いた他の人のために、上記を試しました:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  ...
  if (item.getItemId() == android.R.id.home) {
    ....
  }
  ....
}

しかし、これは「戻る」ボタンの押下をキャッチできませんでした。

最終的に、「AppCompatActivity」サポートライブラリのアクションバーを使用しているため、「onSupportNavigateUp()」をオーバーライドするhttps://stackoverflow.com/a/37185334/3697478で機能するメソッドを見つけました。(新しいアクションバー/ツールバー ライブラリには、同等の "onNavigateUp()" があります。)

@Override
public boolean onSupportNavigateUp(){  
  finish();  
  return true;  
}

マニフェスト ファイルから "android:parentActivityName=".MainActivity" セクションを削除しました。

于 2018-06-11T10:24:41.083 に答える
2

ActionBar のホーム ボタンを押してアクティビティの前のインスタンスに戻りたい場合は、再作成せずに getParentActivityIntent メソッドをオーバーライドして、バック スタックのインスタンスを使用できます。

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public Intent getParentActivityIntent() {
      return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
}

編集:また、親アクティビティのlaunchModeを singleTop に 設定
することで、同じ結果を得ることができます したがって、マニフェストで親アクティビティに設定します。 または、フラグ FLAG_ACTIVITY_CLEAR_TOP を UP インテントで使用できます。 参考:アップナビの提供

android:launchMode="singleTop"

于 2016-03-15T08:55:32.843 に答える