web-dev-qa-db-fra.com

Vues ci-dessus et ci-dessous RecyclerView

J'ai un RecyclerView qui affiche un contenu dynamique. Je voudrais afficher ce RecyclerView entre d'autres vues. Par exemple, une vue affichée ci-dessus et une vue affichée sous la vue RecyclerView:

View
RecyclerView
View

Cependant, tout ce que j'essaie ne semble pas fonctionner et le RecyclerView semble occuper tout l'espace. Je crois que le problème réside dans le problème wrap_content , même si j'ai essayé quelques solutions suggérées, telles que ce Custom LinearLayoutManager , mais cela ne semble pas résoudre mon problème.

Tentative:

<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.CoordinatorLayout  
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fitsSystemWindows="true">

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:orientation="vertical">

        <!-- AppBar works fine; no issue here -->
        <Android.support.design.widget.AppBarLayout
            Android:layout_height="wrap_content"
            Android:layout_width="match_parent"
            Android:id="@+id/app_bar_layout">

            <Android.support.v7.widget.Toolbar
                Android:id="@+id/toolbar"
                Android:layout_height="?attr/actionBarSize"
                Android:layout_width="match_parent"
                app:layout_collapseMode="pin"/>

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

        <!-- Not displaying; Tried different views -->
        <com.chrynan.taginput.view.TextInputWrapper
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:id="@+id/edit_text_container">
            <AutoCompleteTextView
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:id="@+id/edit_text"/>
        </com.chrynan.taginput.view.TextInputWrapper>

        <!-- Takes up entire screen space -->
        <Android.support.v4.widget.SwipeRefreshLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:id="@+id/swipe_refresh">

            <Android.support.v7.widget.RecyclerView
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:id="@+id/recycler_view"/>

        </Android.support.v4.widget.SwipeRefreshLayout>

        <!-- Not displaying -->
        <TextView
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:id="@+id/text_view"/>

    </LinearLayout>

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

Question: Y a-t-il un moyen de placer et d'afficher une vue ci-dessus et une vue ci-dessous une vue RecyclerView? Si c'est le cas, comment? Ou est-il préférable d'utiliser un ListView?

17
chRyNaN

Qu'en est-il de l'utilisation de weight?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:Android="http://..."
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"        
    Android:orientation="vertical"
    >

    <View
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        />

    <RecyclerView
        Android:layout_width="match_parent"
        Android:layout_height="0dp"
        Android:layout_weight="1"
        />

    <View
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        />
</LinearLayout>
31
saulmm

Ce n'est peut-être pas votre solution habituelle, mais vous pouvez néanmoins l'essayer.

Que diriez-vous d’utiliser un RelativeLayout au lieu de LinearLayout, et de régler simplement les marges inférieure et supérieure de votre SwipeRefreshLayout à la hauteur de vos vues comme suit.

<Android.support.design.widget.CoordinatorLayout
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        xmlns:app="http://schemas.Android.com/apk/res-auto"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:fitsSystemWindows="true">

<RelativeLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:orientation="vertical">

    <!-- your app bar -->

    <!-- Not displaying; Tried different views -->
    <com.chrynan.taginput.view.TextInputWrapper
        Android:layout_width="match_parent"
        Android:layout_height="150dp"
        Android:layout_alignParentTop="true"
        Android:id="@+id/edit_text_container"/>

    <!-- Takes up entire screen space -->
    <Android.support.v4.widget.SwipeRefreshLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:paddingTop="150dp"
        Android:paddingBottom="250dp"
        Android:id="@+id/swipe_refresh">

        <Android.support.v7.widget.RecyclerView

            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:id="@+id/recycler_view"/>

    </Android.support.v4.widget.SwipeRefreshLayout>

    <!-- bottom view -->
    <TextView
        Android:layout_alignParentBottom="true"
        Android:layout_width="match_parent"
        Android:layout_height="250dp"
        Android:id="@+id/text_view"/>

</RelativeLayout>

1
Ari

utilisez l'en-tête et le pied de page pour RecyclerView, utilisez le type de vue dans l'adaptateur Recyclerview et ajoutez une vue d'en-tête et de pied de page. . voir ce lien pour plus d'informations https://stackoverflow.com/questions/26245139/how-to-create-recyclerview-with-multiple-view-type?rq=1

1
Pavan Nagaraja