21

Gingerbread 以降をサポートする ActionBars を使用してアプリを開発しています。だから基本的に私はサポートライブラリを使用して拡張しています

アクションバー アクティビティ

私のすべての活動のために。を除いて、すべてがうまく機能します

onSupportNavigateUp()

方法。ドキュメントに記載されているように呼び出されないだけです。

このメソッドは、ユーザーがアクション バーからアプリケーションのアクティビティ階層内で上に移動することを選択するたびに呼び出されます。

これは非常に簡単ですが、なぜ期待どおりに機能しないのか、グーグルが役に立たないのかを理解できませんでした. これはバグですか?または私は何かを逃していますか?

4

8 に答える 8

37

をオーバーライドするonOptionsItemSelectedと、onSupportNavigateUp呼び出されません。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                // handle ⬅️ button here 
                break;
        }
        return true;
}
于 2016-11-16T07:56:22.777 に答える
11

前に述べたように、オーバーライドするとOnOptionsItemSelectedOnSupportNavigateUpは呼び出されません。OnOptionsItemSelected次のように default: ケースを追加することで、確実に呼び出されるようにすることができます。

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.something:
            Intent intent = new Intent(this,someActivity.class);
            startActivity(intent);
            finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

super.onOptionsItemSelected(item)will make sureOnSupportNavigateUpが呼び出されます。これは、ケースを社内で処理したくない場合に備えています。OnOptionsItemSelected

于 2017-07-13T09:02:59.083 に答える
8

Manifest.xml ファイルに親アクティビティを設定しましたか? はいの場合、呼び出されません。@参照 http://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html#onSupportNavigateUp()

于 2014-03-13T14:56:42.583 に答える
0

onSupportNavigateUponOptionsItemSelectedが呼び出されないという同じ問題がありました

子フラグメントで backPress を防ぐ必要があるため、ツールバーの setNavigationOnClickListener をオーバーライドします

 toolbar.setNavigationOnClickListener {

       if(childFragmentHandleBackPressed()){
          NavigationUI.navigateUp(
            navController,
            AppBarConfiguration(navController.graph, drawerLayout)
        )
       }
    }

または、スタート/ルート フラグメントでナビゲーション ドロワー メニューを開きたくない場合は、navController.navigateUp()を使用できます。

于 2020-02-10T12:00:34.880 に答える