ホームボタン用のアクションバーのonClickリスナー


84

onClickListenerアクションバーのホームボタンのカスタムを実装するにはどうすればよいですか?

すでにgetSupportActionBar().setDisplayHomeAsUpEnabled(true);実行しましたが、ホームボタンがクリックされた場合に備えて、ユーザーを特定のアクティビティにリダイレクトしたいと思います。

私は試してみました:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            item.setOnMenuItemClickListener(new OnMenuItemClickListener() {
                public boolean onMenuItemClick(MenuItem item) {
                    Intent i = new Intent();
                    i.setClass(BestemmingActivity.this, StartActivity.class);
                    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(i);
                    return true;
                }
            });
        default:
            return super.onOptionsItemSelected(item);
        }
    }

しかし、それは決して入りませんonMenuItemClick

基本的には、このリンクと同じように実行されますが、それでもリスナーには入力されません。

回答:


112

他の誰かが解決策を必要とする場合

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == android.R.id.home) {
        onBackPressed();  return true;
    }

    return super.onOptionsItemSelected(item);
}

これは解決策になるはずです。素晴らしい答え
jemsnaban 2016年

3
私のために働いたreturn true;
リック

1
ブロックreturn true;の最後にを置くと、ifそれは正しいです
androidguy 2016年

2
このアプローチは、矢印アイコンのあるホーム/戻るボタンでは機能しません。
トランサー2017

111

actionBarSherlockを使用しsupportActionBar.setHomeButtonEnabled(true);
ます。設定した後、onMenuItemSelectedメソッドをオーバーライドできます。

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {

    int itemId = item.getItemId();
    switch (itemId) {
    case android.R.id.home:
        toggle();

        // Toast.makeText(this, "home pressed", Toast.LENGTH_LONG).show();
        break;

    }

    return true;
}

私はあなたのためにこの仕事を願っています~~~頑張ってください


4
私は私を働かせません。最終としてonMenuItemSelectedをオーバーライドすることはできません。
アリトラロイ2015

Androidアノテーションでは、@ OptionsItem(android.R.id.home)を使用するだけです。publicvoidyourMethod(){}
Italo Borssatto 2016年

23

システム指定のアクションバーを使用する場合、次のコードは正常に機能します

getActionBar().setHomeButtonEnabled(true);

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {

    int itemId = item.getItemId();
    switch (itemId) {
    case android.R.id.home:
      //do your action here.
        break;

    }

    return true;
}

7

修正済み:を使用する必要はありませんsetOnMenuItemClickListener。ボタンを押すだけで、インテントを介してアクティビティが作成され、起動されます。

みなさん、ありがとうございました!


そうです、アクションバーがメニューリスナーを処理し、onOptionsItemSelected()自動的に呼び出します。手動でインストールする必要はありません(実際に問題が発生する可能性があります)。
ニコライエレンコフ2012年

5

起こっていることの半分で答えます。マニフェスト.xmlシステムで親アクティビティセットが親アクティビティに移動するときにボタンをonOptionsItemSelected制御しない場合homeAsUp。アクティビティタグで次のように使用します。

<activity ... >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.activities.MainActivity" /> 
</activity>

3

ICSで実行している場合は、ホームアクションを明示的に有効にする必要があります。ドキュメントから:

注:アイコンを使用してホームアクティビティに移動する場合は、Android 4.0(APIレベル14)以降、setHomeButtonEnabled(true)を呼び出してアイコンをアクションアイテムとして明示的に有効にする必要があることに注意してください(以前のバージョンでは、アイコンはデフォルトでアクションアイテムとして有効になっています)。


3
私はすでにagetSupportActionBar().setDisplayHomeAsUpEnabled(true);とaをしましたgetSupportActionBar().setHomeButtonEnabled(true);
noloman 2012年


-4

Override onOptionsItemSelectedを削除し、このコードでonCreateOptionsMenuを再プレートする必要があります

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_action_bar_finish_order_stop, menu);
        menu.getItem(0).setOnMenuItemClickListener(new FinishOrderStopListener(this, getApplication(), selectedChild));
        return true;

    }

1
人々がコードだけで答えることに関するstackoverflowのポリシーを理解して読みに戻る(戻る?)のに役立つ説明をいくつか追加してください。
n0un 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.