web-dev-qa-db-ja.com

getSupportActionbarおよびappcompat v7ツールバーを使用した「戻るボタン」

Appcompat V7ライブラリの新しいツールバーを使用しており、ナビゲーションドロワーとフラグメントを使用してアプリケーションを作成しています。

いくつかのフラグメントでは、ハンバーガーのアイコンを表示するのではなく、代わりに矢印を表示します。

mDrawerToggle.setDrawerIndicatorEnabled(false);

mDrawerToggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);

getSupportActionBar().setHomeAsUpIndicator(R.drawable.abc_ic_ab_back_mtrl_am_alpha);

私の質問は次のとおりです。ホームボタンリズナーをどのように、またはどこで設定する必要があるか、または「戻る」ボタンをリッスンする必要があるものですか?メインのbackpressedメソッドを呼び出し、ナビゲーションドロワーアイコンをハンバーガーアイコンに戻します。

50
András Ferencz

次のようにできます:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);  
    toolbar = (Toolbar)findViewById(R.id.toolbar);
    if (toolbar != null) {
      setSupportActionBar(toolbar);
      getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

    setUpNavigationDrawer();

    getFragmentManager().addOnBackStackChangedListener(backStackListener); // listen to the backstack of the fragment manager
}

OnBackSTackChangedListenerを定義します。

private FragmentManager.OnBackStackChangedListener backStackListener = new FragmentManager.OnBackStackChangedListener() {
   @Override
   public void onBackStackChanged() {
       setNavIcon();
   };
}

フラグメントのバックスタックに従ってアイコンを設定します。

protected void setNavIcon() {
    int backStackEntryCount = getFragmentManager().getBackStackEntryCount();
    drawerToggle.setDrawerIndicatorEnabled(backStackEntryCount == 0);
}

引き出しアイコンが押されたことを検出する:

public boolean onOptionsItemSelected(MenuItem item) {
    if (drawerToggle.isDrawerIndicatorEnabled() && drawerToggle.onOptionsItemSelected(item)) {
        return true;
    }

    switch (item.getItemId()) {
      case x:
         return true;
      default:
         return false;
    }
}

そして、上ボタンを処理します。

public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}

これは私のために動作します。幸運を。

41
tanneebee

このメソッドをonCreate()に追加します。

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

次に、以下のようにonOptionItemSelected()をオーバーライドします。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case Android.R.id.home:
            onBackPressed();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
68
Raja Jawahar

これがOPの場合に機能するかどうかはわかりませんが、多くの場合、これはおそらくAppCompatツールバーで[戻る]ボタンを実装する最も簡単なオプションです。

setHomeButtonEnabledsetDisplayHomeAsUpEnabled、およびonOptionsItemSelectedのすべて、および 関連する問題 をすべてスキップします。

代わりに、ツールバーを初期化するときに、1)ナビゲーションアイコンと2)ナビゲーションOnClickListenerを設定するだけです:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

if (enableBackNavigation) {
    toolbar.setNavigationIcon(R.drawable.ic_back);
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed();
        }
    });
}
31
Jonik

1- Toolbarレイアウトを作成します。

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:local="http://schemas.Android.com/apk/res-auto"
    Android:id="@+id/toolbar"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:background="@color/dark_blue"
    Android:minHeight="?attr/actionBarSize"
    local:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

2- toolbarを配置したい場所のレイアウトにこれを含めます。

3-アクティビティに次のコードを貼り付けます(ActionBarActivityを拡張)

private Toolbar mToolbar;

//For Toolbar (Action bar) start
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        mToolbar.setNavigationIcon(R.drawable.ic_back_arrow);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
        getSupportActionBar().setTitle("Event Details");
        //For Toolbar (Action bar) end

4-バッククリックアイコンを必要なものに変更します。

16
Surendar D

戻るボタンをアクティブにします。

getActionBar().setDisplayHomeAsUpEnabled(enable);

onBackPressed()のクリックを聞きます

明らかにあなたのアクティビティはActionBarActivityを拡張する必要があります

3
TheRedFox

ナビゲーションアイコンを設定し、setNavigationOnClickListener()を設定した後にsetSupportActionBar(toolbar)を設定していることを確認するだけです

toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back));
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        onBackPressed();
    }
});
2
Fenil

マニフェストで、これらの行を戻る矢印を機能させるアクティビティの下に追加します

Android:parentActivityName = "親アクティビティ名"

1
murtaza agaz

SetDisplayHomeAsUpEnabled(true)を追加します

    Toolbar toolbar  = findViewById(R.id.toolbar);
    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        actionBar.setDisplayHomeAsUpEnabled(true);
    }

戻るボタンを扱う

   public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}
0
Farid Haq