DrawerLayout
を囲むNavigationView
があり、このレイアウトアクティビティは、アプリ内のすべてのアクティビティの共通ナビゲーションドロワーとして機能します。ナビゲーションビューでapp:menu
のメニューリソースを提供しています。いくつかのメニュー項目がありますが、1つのメニュー項目を折りたたみ/拡張可能にしたいので、クリックすると2つのサブメニューが表示され、2回目のクリックで再び折りたたまれます。
<menu>
内に別の<item>
を追加することでサブメニューを追加しましたが、それを折りたたみ可能/拡張可能にすることはできません。
また、目的にExpandableListView
を使用したくありません。代わりに、メニューリソースファイルを調整するだけです。私を正しい方向に向けてください。 ExpandableListView
を使用して折りたたみ可能なリストアイテムのコード、ブログ、および例を見つけるためだけにGoogleを検索しましたが、デザインサポートライブラリのNavigationView
デザインウィジェットで作業する必要があります。
メニューファイルのコードは次のとおりです。
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<group Android:checkableBehavior="single">
<item
Android:id="@+id/nav_aboutus"
Android:title="About Us" />
<item
Android:id="@+id/nav_faq"
Android:title="FAQs" />
<item
Android:id="@+id/nav_share"
Android:title="Share" />
<item
Android:id="@+id/nav_myaccount"
Android:title="My Account" />
<item
Android:id="@+id/nav_legal"
Android:title="Legal" >
<menu>
<item
Android:id="@+id/nav_tnc"
Android:title="Terms and Conditions" />
<item
Android:id="@+id/nav_pp"
Android:title="Privacy Policy" />
</group>
</menu>
</item>
</menu>
2つのサブメニュー項目「契約条件」、「プライバシーポリシー」を含む法的メニュー項目を拡張可能にしたい。
ナビゲーションドロワー内で展開可能なリストビューを使用できますが、なぜ使用したくないのかわかりません。詳細については、こちらをご覧ください http://developer.Android.com/reference/Android/widget/ExpandableListView.html
ExpandableListViewを使用しないと主張する場合は、代わりに、その特定のアイテムのメニューのOnSelectを使用して自分で展開を設計します。なぜこれが必要なのかはわかりませんが、ホイールを再実装するだけです。
expandableListViewを使用せずにこれを行うには、メニューレイアウトファイルに通常それらのメニュー項目を追加し、次のように表示するメニュー項目の項目クリックでそれらを非表示/表示するトリックがあります。
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
NavigationView nv= (NavigationView) findViewById(R.id.nav_view);
Menu m=nv.getMenu();
int id = item.getItemId();
if (id == R.id.nav_posts) {
boolean b=!m.findItem(R.id.nav_class).isVisible();
//setting submenus visible state
m.findItem(R.id.nav_class).setVisible(b);
m.findItem(R.id.nav_dept).setVisible(b);
m.findItem(R.id.nav_batch).setVisible(b);
m.findItem(R.id.nav_campus).setVisible(b);
return true;
} else if (id == R.id.nav_walls) {
boolean b=!m.findItem(R.id.nav_wall_events).isVisible();
//setting submenus visible state
m.findItem(R.id.nav_wall_events).setVisible(b);
m.findItem(R.id.nav_wall_fun).setVisible(b);
m.findItem(R.id.nav_wall_hadith).setVisible(b);
m.findItem(R.id.nav_wall_news).setVisible(b);
m.findItem(R.id.nav_wall_Poetry).setVisible(b);
return true;
} else if (id == R.id.nav_com) {
m.findItem(R.id.nav_share).setVisible(false);
m.findItem(R.id.nav_send).setVisible(false);
} else if (id == R.id.nav_share) {
} else if (id == R.id.nav_send) {
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
メニューレイアウトファイルは次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<group Android:checkableBehavior="single">
<item
Android:id="@+id/nav_posts"
Android:icon="@drawable/ic_menu_camera"
Android:title="Posts" />
<item
Android:id="@+id/nav_class"
Android:title="Class"
Android:visible="false" />
<item
Android:id="@+id/nav_dept"
Android:title="Department"
Android:visible="false" />
<item
Android:id="@+id/nav_batch"
Android:title="Batch"
Android:visible="false" />
<item
Android:id="@+id/nav_campus"
Android:title="Campus"
Android:visible="false" />
<item
Android:id="@+id/nav_walls"
Android:icon="@drawable/ic_menu_gallery"
Android:title="Walls" />
<item
Android:id="@+id/nav_wall_news"
Android:title="News"
Android:visible="false" />
<item
Android:id="@+id/nav_wall_events"
Android:title="Events"
Android:visible="false" />
<item
Android:id="@+id/nav_wall_fun"
Android:title="Fun"
Android:visible="false" />
<item
Android:id="@+id/nav_wall_hadith"
Android:title="Hadith"
Android:visible="false" />
<item
Android:id="@+id/nav_wall_Poetry"
Android:title="Poetry"
Android:visible="false" />
</group>
<item
Android:id="@+id/nav_com"
Android:title="Communicate">
<menu>
<item
Android:id="@+id/nav_share"
Android:icon="@drawable/ic_menu_share"
Android:title="Share" />
<item
Android:id="@+id/nav_send"
Android:icon="@drawable/ic_menu_send"
Android:title="Send" />
</menu>
</item>
</menu>
メニューレイアウトファイル:
<item
Android:title="Setup"
Android:id="@+id/SetupGr"
Android:icon="@drawable/setup"
/>
<group
Android:checkableBehavior="none"
Android:id="@+id/SetupGroup">
<item
Android:id="@+id/setupOutdoor"
Android:icon="@drawable/outdoor"
Android:title="Outdoor" />
<item
Android:id="@+id/setupClocks"
Android:icon="@drawable/ic_launcher"
Android:title="Clocks" />
<item
Android:id="@+id/selectMaps"
Android:icon="@drawable/map"
Android:title="Select map" />
</group>
MyActivity.Javaで、目的のメニューをロードします。
public void LoadNavMenu(int iMenu){
navigationView.getMenu().clear();
navigationView.inflateMenu(iMenu);
navigationView.getMenu().setGroupVisible(R.id.HelpGroup,false);
navigationView.getMenu().setGroupVisible(R.id.SetupGroup,false);
}
OnNavigationItemSelected:
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
navigationView.getMenu().setGroupVisible(R.id.HelpGroup,false);
navigationView.getMenu().setGroupVisible(R.id.SetupGroup,false);
switch (item.getItemId()){
case R.id.HelpGr:
navigationView.getMenu().setGroupVisible(R.id.HelpGroup,true);
navigationView.getMenu().setGroupVisible(R.id.SetupGroup,false);
return true;
case R.id.SetupGr:
navigationView.getMenu().setGroupVisible(R.id.SetupGroup,true);
navigationView.getMenu().setGroupVisible(R.id.HelpGroup,false);
return true;
}
base.closeDrawer(GravityCompat.START);
return true;
}
私は1つのアイテムを持っています-セットアップ-そしてユーザーがそれを選択すると-私はIDでグループを設定します-SetupGroup-表示され、引き出しを閉じずに戻ります。それ以外-すべてのグループを非表示に設定します。