元のActionBarからAppCompatツールバーとsetSupportActionBar(toolbar)に変更しました。戻る矢印にgetSupportActionBar()およびsetDisplayHomeAsUpEnabled(true)を使用している場合、クリックがonOptionsItemSelectedまたは他のリスナーメソッドを呼び出すことはありません。
特別なリスナーを実装する必要がありますか?すべてがうまく機能する前に。
編集:ActionBarの初期化:
mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
mActionBar = getSupportActionBar();
mActionBar.setHomeButtonEnabled(true);
コンテンツをフラグメントに置き換えた後、私はこれを行います:
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
mDrawerToggle.setDrawerIndicatorEnabled(false);
mActionBar.setDisplayHomeAsUpEnabled(true);
私はこの質問に回答したことを知っていますが、2日間のフラストレーションの後、問題の本当の原因を見つけました。
ActionBarDrawerToggleのドキュメントをご覧ください: https://developer.Android.com/reference/Android/support/v7/app/ActionBarDrawerToggle.html
そこに2つのコンストラクターがあることに注意してください。私の間違いは、ツールバーをパラメーターとして使用する2番目のコンストラクターを使用していたことです。ツールバーのActionBarとしてツールバーを設定している場合、構成ドキュメントの最後の行に気付くのに時間がかかりました: "ActionBarDrawerToggle(Activity、DrawerLayout、int、int)を使用してくださいアクティビティ。 "
最初のコンストラクターを使用した後、onOptionsItemSelected()は問題なく呼び出されました。
ここで最後の部分で説明するように、アクティビティからActionBarDrawerToggle.onConfigurationChanged()およびonOptionsItemSelected()を呼び出すことを忘れないでください: http://developer.Android.com/training/implementing-navigation/nav-drawer.html
DrawerToggleのOnClickListenerを実装する必要がありました。
mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popStackIfNeeded();
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
mActionBar.setDisplayHomeAsUpEnabled(false);
mDrawerToggle.setDrawerIndicatorEnabled(true);
}
});
これは私の問題を修正しました。
SetSupportActionBar()メソッドを使用していくつかの問題がありました。また、特定のカラーテーマを無視するため、戻る矢印またはオーバーフローアイコンのスタイルを設定できません(どちらを覚えていないか)。 ActionBarの統合を廃止し、ツールバーをネイティブに使用しました。そのため、代わりに、次のようにすることができます。
通常のようにツールバーを含めるだけで、レイアウトに@ + id/toolbarのIDを使用していると想定します。
次に、コードで:
_toolbar = (Toolbar) findViewById(R.id.toolbar);
_toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handleNavButtonPress();
}
});
_toolbar.setOnMenuItemClickListener(_menuItemClickListener);
_toolbar.inflateMenu(R.menu.message_list_menu);
Menu menu = _toolbar.getMenu();
この場合、_menuItemClickListenerはほぼ文字通り、現在のonOptionsItemSelected()メソッドの名前を変更できます。もうメニューがnullであるかどうかを確認する必要はありません。
メニューから項目を削除するには、単にmenu-> clear()を呼び出してください。したがって、私のonPause
で、メニューとonResumeをクリアし、それらをフラグメントに展開し、各フラグメントがonResumeでクリックハンドラーを設定します。 Androidはこのアプローチではあなたのためにそれをしないので、常にクリーンアップする必要があり、ツールバーは膨張するたびにメニューを追加し続けます。
最後に、すべての機能を有効にするには、アクションバーを完全に無効にしてスタイルから削除する必要があります。
すべてを試してみてもうまくいかない場合は、次のように独自のクリックリスナーを実装できます。
myNavList.setOnItemClickListener(new Android.widget.AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String item = myNavList.getItemAtPosition(position).toString();
Toast.makeText(this, "You selected " + item, Toast.LENGTH_SHORT).show();
}
});
言及されていないこと:
オプションメニューをonCreateOptionsMenで動的に作成し、そこにnullを返すと、アクションバーの上ボタンは機能しません。
何も追加せずにMenuパラメーターを返す場合は正常に機能します。
エミュレーターAPI 19でテスト済み
私の場合、setHasOptionsMenu(true);
はonCreateView
で有効になっていません。これが誰かを助けることを願っています。