前提・実現したいこと
同一アクティビティ内のNavigationDrawerのメニューで、menu1,2の二つをスイッチしながら使いたいです。
その際xmlソースコード内のCommonItemA,Bに関してはmenu1と2で共通なので、layoutのincludeのようにスマートに書きたいです。
また、最悪xmlのほうがスマートに書けずともMainActivityのonNavigationItemSelectedだけでもスマートに書きたいと思いましたが、自分の技量ではその方法も見つけられませんでした。
該当のソースコード
xml
1<!--menu1.xml--> 2<?xml version="1.0" encoding="utf-8"?> 3<menu xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:tools="http://schemas.android.com/tools" 5 tools:showIn="navigation_view"> 6 7 <group android:checkableBehavior="single"> 8 <item 9 android:id="@+id/item1" 10 android:icon="@drawable/..." 11 android:title="ItemA" /> 12 <item 13 android:id="@+id/item2" 14 android:icon="@drawable/..." 15 android:title="ItemB" /> 16 </group> 17 18 <item android:title="Commons"> 19 <menu> 20 <item 21 android:id="@+id/common_item1" 22 android:icon="@drawable/..." 23 android:title="CommonItemA" /> 24 <item 25 android:id="@+id/common_item2" 26 android:icon="@drawable/..." 27 android:title="CommonItemB" /> 28 </menu> 29 </item> 30</menu>
xml
1<!--menu2.xml--> 2<?xml version="1.0" encoding="utf-8"?> 3<menu xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:tools="http://schemas.android.com/tools" 5 tools:showIn="navigation_view"> 6 7 <group android:checkableBehavior="single"> 8 <item 9 android:id="@+id/item3" 10 android:icon="@drawable/..." 11 android:title="ItemC" /> 12 </group> 13 14 <item android:title="Commons"> 15 <menu> 16 <item 17 android:id="@+id/common_item3" 18 android:icon="@drawable/..." 19 android:title="CommonItemA" /> 20 <item 21 android:id="@+id/common_item4" 22 android:icon="@drawable/..." 23 android:title="CommonItemB" /> 24 </menu> 25 </item> 26</menu>
Java
1 2//MainActivity 3 4... 5 6public boolean onNavigationItemSelected(MenuItem item) { 7 int id = item.getItemId(); 8 9 if (id == R.id.item1) { 10 //処理 11 } else if (id == R.id.item2) { 12 13 } else if (id == R.id.item3) { 14 15 } else if (id == R.id.common_item1) { 16 17 } else if (id == R.id.common_item2) { 18 19 } else if (id == R.id.common_item3) { 20 //common_item1と同じ処理 21 } else if (id == R.id.common_item4) { 22 //common_item2と同じ処理 23 } 24 25 DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 26 drawer.closeDrawer(GravityCompat.START); 27 return true; 28 }
試したこと
xmlのほうでダメ元でincludeを使ってみましたがダメでした。
また処理は当然別メソッドで記述、switch文なども試してみましたがどうしても冗長になってしまいます。
そもそも今のやり方では、idが一意である以上この分岐を避けられないです。
補足情報(FW/ツールのバージョンなど)
APIレベル22でやっています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/24 19:35