web-dev-qa-db-ja.com

AndroidでNavigationViewにアイテムを動的に追加

新しいアイテムを追加できるようにNavigationDrawerを作成します(新しい都市を追加するyahoo weatherアプリなど)。私はNavigationDrawerNavigationViewを使用していますが、メニューには永続的なフィールドがあります:

   <group
        Android:id="@+id/group"
        Android:checkableBehavior="single">
        <item
            Android:checked="false"
            Android:id="@+id/item1"
            Android:icon="@drawable/ic_inbox_black_24dp"
            Android:title="Item1" />
        <item
            Android:checked="false"
            Android:id="@+id/Item2"
            Android:icon="@drawable/ic_inbox_black_24dp"
            Android:title="Item2"
            />
    </group>

私は新しいItemこのメソッドを追加しようとしています:

 public boolean addNewItem(String itemName){
        Menu menu = navigationView.getMenu();
        menu.add(R.id.group,Menu.NONE,Menu.NONE,itemName);
        return true;
 }

そして、私は私が望むものを正確に得ていません: Result

誰もこの問題を解決する方法を知っていますか?または、なぜこれが起こっているのですか?追加された要素に関する情報をどこでどのように保持できるかはわかりません。何か案は?

17
Skye

アイテムをプログラムで追加するには、NavigationViewgetMenu()メソッドを使用してMenuオブジェクトを取得し、そのMenuオブジェクトを使用してナビゲーションドロワーにアイテムを追加します。

_final Menu menu = navigationView.getMenu();
for (int i = 1; i <= 3; i++) {
   menu.add("Runtime item "+ i);
}
_

SubMenuを使用して、サブセクションとアイテムを追加できます。

_// adding a section and items into it
final SubMenu subMenu = menu.addSubMenu("SubMenu Title");
for (int i = 1; i <= 2; i++) {
   subMenu.add("SubMenu Item " + i);
}
_

詳細については、 TechnoTalkativeを確認してください

編集:メニューを操作する場合は、
menu.add(0, itemId, 0, title);その後

_ public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();
_

idは、割り当てられたitemIdを提供します

22
Pankaj Arora

2つのグループ、group1とgroup2があるとします。 group1にアイテムを動的に追加する場合は、group2に優先順位を割り当てて、常にgroup1より下に設定できます。その後、新しいアイテムをgroup1に追加すると、group2の下には挿入されません。

サンプルを次に示します。

<group Android:id="@+id/group1" />
<group
    Android:id="@+id/group2"
    Android:orderInCategory="999">
    <item
        Android:checked="false"
        Android:id="@+id/item1"
        Android:icon="@drawable/ic_inbox_black_24dp"
        Android:title="Item1" />
    <item
        Android:checked="false"
        Android:id="@+id/Item2"
        Android:icon="@drawable/ic_inbox_black_24dp"
        Android:title="Item2"
        />
</group>

そして、group1にメニュー項目を追加すると:

Menu menu = navigationView.getMenu();
menu.add(R.id.group1,Menu.NONE,Menu.NONE,itemName);

これは動作するはずです。 Androidデザインライブラリ23.1.1でテストしました。

13
Hexise
<group Android:checkableBehavior="single"> 
    <item
        Android:id="@+id/send_notification"
        Android:icon="@drawable/ic_menu_send"
        Android:title="@string/send_notification"
        Android:visible="false"/>     
</group>

ナビゲーションドロワーにアイテムを動的に追加する場合は、xmlで非表示にし、次のようにプログラムで表示します。

NavigationView navigationView = findViewById(R.id.nav_view);
Menu menu=navigationView.getMenu();
menu.findItem(R.id.send_notification).setVisible(true);

それでおしまい。

0
Sanath L S