1

У меня есть ящик для навигации в приложении для Android. Я могу показать меню в навигационном ящике с navigationView, но я хочу показать listview или recyclerview в ящике. Мне нужно, потому что меню ящика не одинаково для каждого пользователя. пользователи выбирают газеты, которые они хотят читать. например:Как добавить ListView в NavigationView?

  • пользователя ListView А будет выглядеть так: Washington Post, New York Times, Guardian, Independent.

  • пользовательский список пользователей B: Daily Mail, Washington Post, Financial Times.

Как я могу добавить listview в navigationView?

activity_main.xml:

<android.support.v4.widget.DrawerLayout > 
... 
<android.support.design.widget.CoordinatorLayout> 
    ... 
    <android.support.design.widget.AppBarLayout> 
     ... 
     <android.support.v7.widget.Toolbar/> 

    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

</android.support.design.widget.CoordinatorLayout> 

<android.support.design.widget.NavigationView 
    android:id="@+id/navigation_drawer" 
    android:layout_width="200dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    app:menu="@menu/menu_drawer" 
    app:layout="@layout/custom_row"/> 

menu_drawer.xml:

<group 
    android:id="@+id/group_1" 
    android:checkableBehavior="single"> 
    <item 
     android:id="@+id/nav_first_fragment" 
     android:icon="@drawable/ic_number_0" 
     android:title="First" /> 
    <item 
     android:id="@+id/nav_second_fragment" 
     android:icon="@drawable/ic_number_1" 
     android:title="Second" /> 
    <item 
     android:id="@+id/nav_third_fragment" 
     android:icon="@drawable/ic_number_2" 
     android:title="Third" /> 
</group> 

<group 
    android:id="@+id/group_2" 
    android:checkableBehavior="single"> 

    <item 
     android:id="@+id/navigation_item_11" 
     android:icon="@drawable/ic_number_0" 
     android:title="My Newspapers"> 

     <menu> 

      <item 
       android:id="@+id/navigation_item_1" 
       android:icon="@drawable/ic_number_0" 
       android:title="@string/navigation_item_1" /> 
      <item 
       android:id="@+id/navigation_item_2" 
       android:icon="@drawable/ic_number_1" 
       android:title="@string/navigation_item_2" /> 
      <item 
       android:id="@+id/navigation_item_3" 
       android:icon="@drawable/ic_number_2" 
       android:title="@string/navigation_item_3" /> 
      <item 
       android:id="@+id/navigation_item_4" 
       android:icon="@drawable/ic_number_3" 
       android:title="@string/navigation_item_4" /> 
      <item 
       android:id="@+id/navigation_item_5" 
       android:icon="@drawable/ic_number_4" 
       android:title="@string/navigation_item_5" /> 

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

custom_row.xml:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/text_superhero" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:paddingBottom="4dp" 
     android:paddingLeft="16dp" 
     android:paddingRight="16dp" 
     android:paddingTop="4dp" 
     android:text="Superhero" 
     android:textColor="@color/colorTextSecondary"> 

ответ

0

A NavigationView - это не что иное, как обертка для RecyclerView, которая заполняет список из XML-ресурса меню и предоставляет ящик, соответствующий материалу, из коробки. На самом деле нет специальной логики, которая заставляет ее работать в ящике навигации.

Если вы хотите использовать более динамичный навигационный ящик, вы должны просто заменить NavigationView в своем формате XML RecyclerView и заполнить его, как и любой другой RecyclerView.

+0

я заменил Navigationview с RecyclerView, но это не сработало. recyclerview соответствовал всему экрану. панель инструментов и другие виды не отображаются. – cimenmus

+0

Ваш навигационный ящик полностью не зависит от вашей панели инструментов и других видов экрана. Убедитесь, что вы только заменяете «NavigationView» и что все свойства RecyclerView такие же, как у вас раньше (например, «android: layout_width»). –

+0

Я заменил только тег NavigationView с помощью RecyclerView, не изменил свойства, просто добавил те же новые свойства и сделал! Спасибо. – cimenmus

4

Вы можете использовать этот код, но помните, что вам нужно использовать адаптер для заполнения вашей ListView

<android.support.design.widget.NavigationView 
    android:id="@+id/nav_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:fitsSystemWindows="true" 
    app:headerLayout="@layout/nav_header_main"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <include layout="@layout/nav_header_main" /> 

     <ListView 
      android:id="@+id/list_slidermenu" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:choiceMode="singleChoice" 
      android:divider="@color/list_divider" 
      android:dividerHeight="1dp" 
      android:listSelector="@drawable/list_selector" 
      android:textColor="#424242"/> 

    </LinearLayout> 

</android.support.design.widget.NavigationView> 

У вас есть этот результат: enter image description here

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