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メソッドを呼び出し、ナビゲーションドロワーアイコンをハンバーガーアイコンに戻します。
次のようにできます:
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;
}
これは私のために動作します。幸運を。
このメソッドを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);
}
}
これがOPの場合に機能するかどうかはわかりませんが、多くの場合、これはおそらくAppCompatツールバーで[戻る]ボタンを実装する最も簡単なオプションです。
setHomeButtonEnabled
、setDisplayHomeAsUpEnabled
、および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();
}
});
}
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-バッククリックアイコンを必要なものに変更します。
戻るボタンをアクティブにします。
getActionBar().setDisplayHomeAsUpEnabled(enable);
onBackPressed()
のクリックを聞きます
明らかにあなたのアクティビティはActionBarActivity
を拡張する必要があります
ナビゲーションアイコンを設定し、setNavigationOnClickListener()
を設定した後にsetSupportActionBar(toolbar)
を設定していることを確認するだけです
toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back));
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
マニフェストで、これらの行を戻る矢印を機能させるアクティビティの下に追加します
Android:parentActivityName = "親アクティビティ名"
SetDisplayHomeAsUpEnabled(true)を追加します
Toolbar toolbar = findViewById(R.id.toolbar);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
戻るボタンを扱う
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}