2015-07-30 19 views
13

Tôi muốn xây dựng NavigationDrawer với khả năng thêm các mục mới (chẳng hạn như ứng dụng thời tiết yahoo có thêm thành phố mới). Tôi đã làm việc với NavigationDrawerNavigationView, trong menu Tôi có lĩnh vực vĩnh viễn:mục thêm động vào NavigationView trong Android

<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> 

Tôi đang cố gắng để thêm mới mục phương pháp này:

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

Và tôi nhận được không chính xác những gì tôi muốn: Result

Có ai có ý tưởng giải quyết vấn đề này không? Hay tại sao điều này lại xảy ra? Tôi không biết ở đâu và như thế nào người ta có thể giữ thông tin về các yếu tố được thêm vào. Bất kỳ ý tưởng?

+0

Bạn có thấy nguồn ngăn kéo không? Nếu bạn thay đổi một cái gì đó trong ngăn kéo, hãy nhớ để làm mất hiệu lực nó/tải lại – deadfish

+0

Ofc, vấn đề là tôi không thể thêm mục mới bên dưới Item2. Khi tôi gọi phương thức addNewItem, mục mới không xuất hiện trong nhóm đầu tiên phía trên dấu tách, nhưng ở cuối trình đơn. – Skye

+0

còn phương thức 'addHeaderView()' thì sao? – deadfish

Trả lời

17

Để thêm mục theo chương trình, chúng ta có thể nhận đối tượng Menu bằng cách sử dụng phương thức getMenu()NavigationView và sau đó chúng tôi có thể thêm mục vào ngăn điều hướng sử dụng đối tượng Menu.

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

Sử dụng SubMenu, chúng tôi có thể thêm phần phụ và các mục vào đó.

// 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); 
} 

để biết thêm chi tiết Check TechnoTalkative.

+0

Mọi thứ đều ổn nhưng nó không phải là ý tôi. Nó chỉ hoạt động khi tôi xóa Cài đặt và Giới thiệu về các mục:/ – Skye

+0

Cách thêm biểu tượng vào mục? Tôi nghĩ điều đó là không thể. –

+4

Để thêm một biểu tượng, menu.add() trả về menuItem, trên đó bạn có thể gọi setIcon(). –

12

Giả sử bạn có hai nhóm, nhóm1 và nhóm2. Nếu bạn muốn tự động thêm các mục vào nhóm1, thì bạn có thể gán mức độ ưu tiên cho nhóm2 để làm cho nó luôn nằm dưới nhóm1. Sau đó, khi bạn thêm các mục mới vào nhóm1, nó sẽ không được chèn vào bên dưới group2.

Đây là một mẫu:

<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> 

Và khi bạn thêm các mục menu để nhóm1:

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

này nên làm việc. Tôi đã thử nghiệm nó trên thư viện thiết kế Android 23.1.1.

+0

Menu đã thêm nhưng nó luôn được thêm vào vị trí hàng đầu, tôi không thể thêm nó vào vị trí mong muốn. bất kỳ ý tưởng –

+0

@HiteshDhamshaniya bạn vẫn có thể sử dụng tham số thứ tự trong Menu.add() phương pháp. Thứ tự lớn hơn sẽ được sắp xếp ở dưới cùng. – Hexise

Các vấn đề liên quan