0

私はNavigationDrawerテンプレートを使用しています。フラグメントを切り替えることができます。しかし、私はすべての断片でツールバーの機能を変更したい。私のフラグメント内で一意のツールバーアクションを設定するにはどうすればよいですか?ナビゲーション・ドロワー・テンプレートでフラグメントをツールバーに変更

+0

フラグメントごとに異なるオプションメニューを意味しますか? – ElDuderino

+0

ええ、ちょうどすべてのフラグメントにアクティビティのツールバーがあります –

+0

フラグメント間の通信を使用して、必要に応じてツールバーのオプションを決定してみてください。 – sumandas

答えて

1

はあなたのNavigationViewNavigationItemSelected ClickListenerとそれにこのような何かをの割り当てツールバー。 次のようなもの:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
<item android:id="@+id/action_close" 
     android:title="" 
     android:icon="@drawable/ic_close_white_24px" 
     app:showAsAction="always|collapseActionView"/> 
    <item android:id="@+id/..." 
     android:title="" 
     android:icon="..." 
     app:showAsAction="always|collapseActionView"/> 
</menu> 
2

setHasOptionsMenu(true)onCreate()各断片の方法でできると思います。そして通常はovverideメソッドonCreateOptionsMenu()です。私は、メニューを作成するときにいつもするようにメニューや他のものを膨らませることを意味します。

これで、DrawerListenerをDrawerLayoutに設定する必要があるということです。リスナーのovverideメソッドonDrawerOpened()onDrawerClosed()にそれぞれinvalidateOptionsMenu()を呼び出す必要があります。

android.support.v7.app.ActionBarDrawerToggleをDrawerListenerとして使用してください。ここではその

myDrawerLayout.addDrawerListener(new ActionBarDrawerToggle(this, mDrawerLayout, 
       R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) { 

      public void onDrawerClosed(View view) { 
       super.onDrawerClosed(view) 

       invalidateOptionsMenu(); 
      } 

      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 

       invalidateOptionsMenu(); 
      } 
     }; 

のようなメソッドに渡しR.string.drawer_closeとdrawer_openは「閉じる」に等しいリソースで文字列だけでは、それぞれ「オープン」です。あなたがここで読むことができるナビゲーション引き出しの詳細:Navigation Drawers

また、各フラグメントで一意のツールバーを使用することはできません。私はツールバーのインスタンスを意味します。少なくともそれは私のために働いたことはありません。代わりにツールバーを一度作成してから、各フラグメントの内容を変更してください。すべてのフラグメントからツールバーにアクセスするには、RetainFragmentなどのヘルパーフラグメントを1つ使用し、setRetainInstance(true)を使用します。このフラグメントを破棄せずに、さまざまな変数やオブジェクトを保存するのに役立ちます。より詳細なあなたは私の記事で読むことができます:

switch (e.menuItem.itemId) 
      { 
       case (R.id.nav_home): 
        e.MenuItem.SetChecked(true); 
        toolbar.inflateMenu(R.menu.newMenu); 
        break; 
       case (R.id.nav_two): 
        e.MenuItem.SetChecked(true); 
        toolbar.inflateMenu(R.menu.newMenu2); 
        break; 
      } 

そして、それぞれがあなたのためのさまざまなコントロールが含まれていることを、あなたのメニューフォルダに新しいXMLファイルを作成します。Simple trick to use and manage Toolbar with Fragments in Android

+0

ありがとうございますが、あなたは私の意図を強調していません –

関連する問題