2015-09-03 5 views
3

Я хочу создать расширение expandablelistview как вид внутри навигационного ящика, где изначально отображаются только основные названия (сворачиваемые подменю). При щелчке заголовка должны появиться подменю (если возможно, оживить)Как показать/скрыть подменю внутри NavigationView android

Я использую android.support.design.widget.NavigationView. Я могу добавить подменю через xml.

<group android:checkableBehavior="all"> 
    <item 
     android:id="@+id/action_venues" 
     android:title="TITLE 1"> 
     <menu> 
      <group 
       android:id="@+id/group1" 
       android:checkableBehavior="single" 
       > 
       <item android:title="SUBTITLE1.1" /> 
       <item android:title="SUBTITLE1.2" /> 
       <item android:title="SUBTITLE1.3" /> 

      </group> 
     </menu> 
    </item> 
    <item 
     android:id="@+id/action_vendors" 
     android:title="TITLE2"> 
     <menu> 
      <group 
       android:id="@+id/group2" 
       android:checkableBehavior="single" 
       android:visible="false"> 
       <item android:title="SUBTITLE2.1" /> 
       <item android:title="SUBTITLE2.2" /> 
       <item android:title="SUBTITLE2.3" /> 

      </group> 
     </menu> 
    </item> 

Но если я держать любую группу в XML-андроида: видимый = «ложь» не появляется в ящике.

Я также попытался программно отобразить/скрыть подменю с:

subMenu1.setGroupVisible(R.id.group1,false); 

Но он просто скрывает меню заголовка также.

Возможно ли это с помощью android.support.design.widget.NavigationView или мне нужно использовать нестандартное представление?

+0

Вы нашли решение, чтобы получить пункт меню для анимации при изменении видимости? –

ответ

1

Мне удалось показать/скрыть субтитры, сделав заголовки отдельной группой. Не уверен, что это правильный путь:

<group> 
    <item 
     android:id="@+id/action_venues" 
     android:title="group1" /> 
</group> 
<group 
    android:id="@+id/group2" 
    android:checkableBehavior="single"> 
    <item android:title="SUBTITLE1.1" /> 
    <item android:title="SUBTITLE1.2" /> 
    <item android:title="SUBTITLE1.3" /> 
</group> 

<group> 
    <item 
     android:id="@+id/action_vendors" 
     android:title="group3" /> 
</group> 
<group 
    android:id="@+id/group4" 
    android:checkableBehavior="single" 
    android:visible="false"> 
    <item android:title="SUBTITLE2.1" /> 
    <item android:title="SUBTITLE2.2" /> 
    <item android:title="SUBTITLE2.3" /> 
</group> 

А потом в коде:

Menu drawerMenu = drawer.getMenu(); 
case R.id.action_venues: 
    drawerMenu.setGroupVisible(R.id.group2,true); 
case R.id.action_vendors: 
    drawerMenu.setGroupVisible(R.id.group4,true); 

Но до сих пор не может анимировать.

+2

Ничего, что я пытаюсь работать, даже ваш ответ ... –

3
Menu menu = navigationView.getMenu(); 
    for (int i = 0; i < menu.size(); i++) { 

     if (menu.getItem(i).getItemId() != R.id.login){ 
      menu.getItem(i).setVisible(false); 
     } 

    } 
2

Для тегов группы я использовал

navigationView.getMenu().setGroupVisible(false) 

Для тегов элементов я использовал

navigationView.getMenu().findViewById(R.id.id_of_the_item).setVisibility(View.GONE) 

Все работает.

+0

getMenu() не имеет доступа к findViewById(). Можете ли вы опубликовать код запуска? – transistor

Смежные вопросы