2015-10-14 22 views
6

Tôi có ngăn điều hướng trong ứng dụng Android của mình. Tôi có thể thêm các nhóm và các mục vào nó bằng trung bình của XML, tuy nhiên, tôi cần thêm các nhóm mới vào nó theo lập trình.Cách thêm nhóm vào ngăn điều hướng theo chương trình

Ví dụ, tôi có XML này:

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

Làm thế nào tôi có thể làm điều đó nếu nhóm mà không có các mặt hàng và tôi cần phải thêm chúng bằng cách mã?

Nếu tôi sử dụng:

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

Các mục được thêm vào như một menu bên dưới tất cả các tùy chọn, không phải là một nhóm.

Kính trọng, Jaime

+0

Tôi đề nghị bạn tất cả các mục theo chương trình, như được đề xuất trong [hướng dẫn này] (http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer/). –

+0

'sistemas.addSubMenu'? đó là những gì bạn muốn làm? – pskink

+0

Tôi đoán bạn đang sử dụng 'NavigationView'. Tôi nhìn vào mã cho 'NavigationView' và nó không phải là năng động. Nó sử dụng tài nguyên menu để tạo ra khung nhìn lúc khởi tạo và về cơ bản bỏ qua nó sau đó. Nếu bạn muốn làm bất cứ điều gì năng động, bạn sẽ cần phải tìm một giải pháp khác ngoài 'NavigationView'. May mắn thay, có rất nhiều ngăn kéo nav trên GitHub. Tôi đã tự cuộn bằng cách sử dụng 'android.support.design.internal.ScrimInsetsFrameLayout'. –

Trả lời

8

Đề nghị của tôi tốt nhất nếu bạn muốn dính vào NavigationView là phải làm như sau:

Thiết lập XML của bạn để chứa bất kỳ nhóm nào bạn nghĩ rằng bạn cần phải thêm động và đặt chúng để vô hình:

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

Sau đó, khi bạn cần phải chỉ cho họ hoặc thêm tùy chọn động cho các nhóm:

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

Chỉ cần đảm bảo khi bạn thêm các mục của bạn, các mục của mục là khác nhau và thứ tự trong danh mục là thứ tự thực tế trong toàn bộ menu của mục động.

+0

Tôi đã thực hiện nó và tùy chọn được thêm vào, tuy nhiên, khi tôi nhấp vào đó, nền không thay đổi thành màu xám phản ánh nó được chọn, vì các mục nhóm khác hoạt động. Tôi có cần phải làm gì khác không? ví dụ: để chỉ định trình xử lý nhấp chuột hoặc bất kỳ thứ gì. – jstuardo

+0

@jstuardo nếu mỗi nhóm cần được kiểm tra chỉ cần thêm 'android: checkableBehavior =" single "vào những người cần nó theo định nghĩa xml của menu –

+0

Không may mắn. Tôi đã thiết lập thuộc tính đó cho thẻ nhóm, và onNavigationItemSelected thậm chí còn được gọi, tuy nhiên, mục đó không có lựa chọn nào. Khi tôi nhấp vào nhóm được xác định trước, onNavigationItemSelected cũng được gọi và mục hiển thị chính xác với màu xám brackground. – jstuardo

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