Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Agregar un ListView o RecyclerView a nuevo NavigationView

Estoy utilizando el nuevo NavigationView de la revisión 22.2.0 de la biblioteca de soporte de Google. Funciona perfectamente bien para generar un cajón de navegación poblado con un menú res.

Me preguntaba si es posible agregar un ListView o RecyclerView al cajón de la navegación de modo que pueda ser poblado usando mi código del adaptador de encargo, que permite una flexibilidad lejos más grande que recursos del menú.

  • Editar texto en ListActivity ListView pierde foco cuando aparece el teclado
  • Problemas con la detección de gestos en ListView
  • Aquí está mi XML actual:

    <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" 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" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context=".MainActivity"> <FrameLayout android:id="@+id/content_view" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/main_toolbar" /> </FrameLayout> <android.support.design.widget.NavigationView android:id="@+id/navigation_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:headerLayout="@layout/navigation_drawer_header" app:menu="@menu/menu_navigation_drawer" /> </android.support.v4.widget.DrawerLayout> 

    ¿Dónde en mi XML agregaría el ListView o RecyclerView?

    EDITAR

    Según la sugerencia de Basant, anidé un ListView en el NavigationView. Usted pierde la capacidad de inflar de un menú res (por lo que sé), pero tiene éxito en lo que quiero que haga. El encabezado XML no cambia, sólo se incluye en XML.

    Nuevo código:

     <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context=".MainActivity"> <FrameLayout android:id="@+id/content_view" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/main_toolbar" /> </FrameLayout> <android.support.design.widget.NavigationView android:id="@+id/navigation_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <include android:id="@+id/navigation_drawer_header_include" layout="@layout/navigation_drawer_header" /> <ListView android:id="@+id/navigation_drawer_list" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/navigation_drawer_header_include"/> </RelativeLayout> </android.support.design.widget.NavigationView> </android.support.v4.widget.DrawerLayout> 

  • Problemas con la detección de gestos en ListView
  • Editar texto en ListActivity ListView pierde foco cuando aparece el teclado
  • 4 Solutions collect form web for “Agregar un ListView o RecyclerView a nuevo NavigationView”

    Sólo puede anidar el ListView o RecyclerView dentro de la NavigationView .

     <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" 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" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context=".MainActivity"> <FrameLayout android:id="@+id/content_view" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/main_toolbar" /> </FrameLayout> <android.support.design.widget.NavigationView android:id="@+id/navigation_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start"/> <ListView android:id="@+id/menuList" android:layout_width="match_parent" android:layout_height="match_parent"/> </android.support.v4.widget.DrawerLayout> 

    NOTA: Tenga en cuenta que si usa usar un ListView dentro de él, no puede usar el encabezado de NavigationView. Tendrá que utilizar la vista de encabezado del ListView que está agregando. No te olvides de eliminar los campos app:menu y app:header .

    Si desea agregar vistas dentro de NavigationView puede hacer algo como esto. De esta manera, no tiene ninguna restricción de añadir Header en su NavigtionView con ListView.

      <android.support.v4.widget.DrawerLayout 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" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:openDrawer="start"> <include layout="@layout/app_bar_main" android:layout_width="match_parent" android:layout_height="match_parent" /> <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="false" > <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <include layout="@layout/nav_header_main" android:id="@+id/my" /> <ListView android:layout_weight="7" android:layout_width="match_parent" android:layout_height="0dp" android:id="@+id/list_view_inside_nav"></ListView> </LinearLayout> </android.support.design.widget.NavigationView> </android.support.v4.widget.DrawerLayout> 

    Que se parezca a esto

    ejemplo

    En respuesta al comentario de Shubham

    This will not scroll the header view like the Navigation View does

    Lo resolví poniendo el LinearLayout dentro de un NestedScrollView . Ahora se desplaza correctamente con el encabezado.

     <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/nav_header_main" /> <android.support.v7.widget.RecyclerView android:id="@+id/nav_list" android:layout_width="match_parent" android:layout_height="@dimen/weight_based_height" android:layout_weight="1" android:nestedScrollingEnabled="false"/> </LinearLayout> </android.support.v4.widget.NestedScrollView> 

    Intenta de esta manera

     <android.support.design.widget.NavigationView android:id="@+id/navigation" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/nav_header" /> <ListView android:id="@+id/lst_menu_items" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout> 

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.