it-swarm.com.de

Fügen Sie der neuen Navigationsansicht eine ListView oder RecyclerView hinzu

Ich verwende die neue NavigationView aus der Version 22.2.0 der Support-Bibliothek von Google. Das Erstellen einer Navigationsleiste, die mit einem Menü res gefüllt wird, funktioniert einwandfrei.

Ich habe mich gefragt, ob es möglich ist, ein ListView oder ein RecyclerView zur Navigationsleiste hinzuzufügen, damit es mit meinem benutzerdefinierten Adaptercode aufgefüllt werden kann, was eine weitaus größere Flexibilität als Menüressourcen ermöglicht.

Hier ist mein aktuelles XML:

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

Wo würde ich in meinem XML die ListView oder RecyclerView hinzufügen?

EDIT

Gemäß dem Vorschlag von Basant habe ich eine ListView in die NavigationView geschachtelt. Sie verlieren die Fähigkeit, aus einem Menü res aufzublasen (soweit ich weiß), aber es gelingt, was ich möchte. Das Header-XML ist unverändert, es wird nur in XML übernommen.

Neuer Code:

<?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>
15
nabir

Sie können die Variable ListView oder RecyclerView einfach in der Variable NavigationView verschachteln.

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

ANMERKUNG: Beachten Sie, dass Sie bei Verwendung einer ListView nicht die Kopfzeile der NavigationView verwenden können. Sie müssen die Kopfansicht der ListView verwenden, die Sie hinzufügen. Vergessen Sie nicht, die Felder app:menu und app:header zu entfernen.

18
Basant Singh

Wenn Sie Ansichten innerhalb der Navigationsansicht hinzufügen möchten, können Sie so etwas tun. Auf diese Weise haben Sie keine Einschränkungen beim Hinzufügen von Header auf Ihrem NavigtionView mit 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>

Das sieht so aus

 example

17
redblood

Als Antwort auf Shubhams Kommentar

Dadurch wird die Kopfansicht nicht wie in der Navigationsansicht gescrollt

Ich habe es gelöst, indem ich LinearLayout in ein NestedScrollView steckte. Nun rollt es richtig mit der Kopfzeile.

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

Versuchen Sie es so

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

1
Mahendran Candy