2015-10-14 9 views
6

私はアンドロイドアプリにナビゲーションドロワーを持っています。 XMLを使ってグループや項目を追加することはできますが、プログラムで新しいグループを追加する必要があります。ナビゲーションドロワーにプログラムでグループを追加するには

例えば、私はこのXMLを持っている:そのグループが何のアイテムを持っていないと私はコードでそれらを追加する必要がある場合

<group android:checkableBehavior="single"> 
    <item android:id="@+id/nav_camara" android:icon="@android:drawable/ic_menu_camera" 
     android:title="Import" /> 
    <item android:id="@+id/nav_gallery" android:icon="@android:drawable/ic_menu_gallery" 
     android:title="Gallery" /> 
    <item android:id="@+id/nav_slideshow" android:icon="@android:drawable/ic_menu_slideshow" 
     android:title="Slideshow" /> 
    <item android:id="@+id/nav_manage" android:icon="@android:drawable/ic_menu_manage" 
     android:title="Tools" /> 
</group> 

は、どのように私はそれを行うことができますか?

は、私が使用している場合:

Menu sistemas = navigationView.getMenu(); 
sistemas.add(Menu.FIRST, 1, 0, "Prueba"); 

項目がないグループとして、すべてのオプション下のメニューとして追加されます。

よろしく、 ハイメ

+0

[このチュートリアル](http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer/)で提案されているように、プログラムですべてのアイテムをお勧めします。 –

+0

'sistemas.addSubMenu'?それはあなたがしたいことですか? – pskink

+0

私は 'NavigationView'を使っていると思います。私は 'NavigationView'のコードを見ましたが、それは動的ではありません。メニューリソースを使用して初期化時にビューを作成し、基本的にそれを無視します。動的なことをしたいのであれば、 'NavigationView'以外の解決策を探す必要があります。幸運なことに、GitHubには多くのnav引き出しがあります。私は 'android.support.design.internal.ScrimInsetsFrameLayout'を使って自分自身をロールバックしました。 –

答えて

8

私の最高の提案あなたがNavigationViewに固執したい場合は、以下を行うことです:あなたはあなたが動的に追加する必要があると思う任意の基を含み、それらを設定するために、あなたのXMLを設定

不可視に:次に

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> 
    <group android:id="@+id/main_group"> 
     <item android:id="@+id/nav_camara" 
      android:icon="@android:drawable/ic_menu_camera" 
      android:title="Import" /> 
     <item android:id="@+id/nav_gallery" 
      android:icon="@android:drawable/ic_menu_gallery" 
      android:title="Gallery" /> 
     <item android:id="@+id/nav_slideshow" 
      android:icon="@android:drawable/ic_menu_slideshow" 
      android:title="Slideshow" /> 
     <item android:id="@+id/nav_manage" 
      android:icon="@android:drawable/ic_menu_manage" 
      android:title="Tools" /> 
    </group> 
    <group android:visible="false" android:id="@+id/second_group"> 

    </group> 
    <group android:visible="false" android:id="@+id/third_group"> 

    </group> 
</menu> 

あなたがそれらを表示したり、これらのグループのための動的なオプションを追加する必要があります。

 Menu menu = mNavView.getMenu(); 

     // Add items to the second group, and set to visible 
     menu.add(R.id.second_group, 1, 100, "Item 1"); 
     menu.add(R.id.second_group, 2, 200, "Item 2"); 
     menu.add(R.id.second_group, 3, 300, "Item 3"); 
     menu.setGroupCheckable(R.id.second_group, true, true); 
     menu.setGroupVisible(R.id.second_group, true); 

     // Add items to the third group, and set to visible 
     menu.add(R.id.third_group, 4, 400, "Item 1"); 
     menu.add(R.id.third_group, 5, 500, "Item 2"); 
     menu.add(R.id.third_group, 6, 600, "Item 3"); 
     menu.setGroupCheckable(R.id.third_group, true, true); 
     menu.setGroupVisible(R.id.third_group, true); 

アイテムを追加するときは、アイテムIDが異なり、カテゴリ内の順序が動的アイテムのメニュー全体の実際の順序であることを確認してください。

+0

私はそれをして、オプションが追加されます、しかし、それをクリックすると、他のグループ項目が挙動するので、背景が選択されたことを反映して灰色に変わらない。私は何か別のことをする必要がありますか?たとえば、クリックハンドラなどを割り当てることができます。 – jstuardo

+0

@jstuardo各グループをチェック可能にする必要がある場合は、メニューのxml定義に必要なものに 'android:checkableBehavior =" single "'を追加してください。 –

+0

私はその属性をグループタグに設定しており、onNavigationItemSelectedも呼び出されていますが、項目には選択が表示されません。あらかじめ定義されたグループをクリックすると、onNavigationItemSelectedも呼び出され、アイテムは灰色の括弧で正しく表示されます。 – jstuardo