web-dev-qa-db-fra.com

ListView ne se développe pas dans NestedScrollView

J'utilise CoordinatorLayout dans ma page d'activité. En cela, il y a ListView sous la barre d'applications. Mais cela ne fonctionne pas lorsque j'utilise ListView au lieu de NestedScrollView. Et si je mets ListView dans NestedScrollView, ListView n’est pas en expansion

32
Bincy Baby

Pour que CoordinatorLayout fonctionne correctement, il est nécessaire que l'enfant faisant défiler implémente/ NestedScrollingChild . De telles classes sont NestedScrollView et RecyclerView.

Pour faire court, utilisez simplement une RecyclerView pour votre contenu défilant et tout fonctionnera correctement :)

P.S. En remarque, je ne vois pas pourquoi vous utiliseriez plus une ListView. Je sais que c'est une habitude et que c'est plus facile à configurer (parce que vous l'avez fait plusieurs fois), mais utiliser une variable RecyclerView est de toute façon recommandé.

31
Vesko

vous pouvez résoudre ce problème en ajoutant addtributeAndroid:fillViewport="true" dans Android.support.v4.widget.NestedScrollView :). C'est mon code.

<Android.support.v4.widget.NestedScrollView
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:scrollbars="none"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    Android:fillViewport="true"
    >
    <ListView
        Android:id="@+id/list_myContent"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:scrollbars="vertical"
        >
    </ListView>

</Android.support.v4.widget.NestedScrollView>
59
Chung Nguyen

sur Lollipop, vous pouvez utiliser 

setNestedScrollingEnabled(true);

sur votre ListView/GridView/ScrollableView. De la documentation

Activer ou désactiver le défilement imbriqué pour cette vue

si vous avez besoin d'une compatibilité ascendante avec une version antérieure du système d'exploitation, vous devrez utiliser la variable RecyclerView Vous pouvez en lire plus ici

Modifier. ViewCompat a la méthode statique setNestedScrollingEnabled(View, boolean). Par exemple.

ViewCompat.setNestedScrollingEnabled(listView, true)

merci à @Dogcat pour l'avoir signalé

37
Blackbelt

Il suffit de mettre Android:fillViewport="true" à l'intérieur de vous NestedScrollView Tag

11
Shivam

c'est ce qui a fonctionné pour moi.

définir Android:fillViewport="true" sur la NestedScrollView

ajoutez un élément de mise en forme en tant qu'enfant à NestedScrollView. Dans mon cas, LinearLayout et ensuite Définir Android:nestedScrollingEnabled="true" sur ListView Faire de ListView un enfant de LinearLayout 

Bon aller 

4
Louis Nuhoho

Votre liste va défiler. J'espère vous aider.

<?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"
    xmlns:tools="http://schemas.Android.com/tools"

    <Android.support.v4.widget.NestedScrollView
         Android:layout_width="match_parent"
         Android:layout_height="match_parent"
         Android:fillViewport="true"
         app:layout_behavior="@string/appbar_scrolling_view_behavior">

         <ListView
              Android:layout_width="match_parent"
              Android:layout_height="match_parent"
              Android:nestedScrollingEnabled="true">
         </ListView>
    </Android.support.v4.widget.NestedScrollView>

</Android.support.design.widget.CoordinatorLayout>
3
Tuan Nguyen

Le code ci-dessous a fonctionné pour moi: 

ViewCompat.setNestedScrollingEnabled(listView, true);

Votre ListView devrait être à l'intérieur NestedScrollView

1
Swati Singh

Remplacez votre ListView par RecyclerView si possible sinon créez votre customListView et définissez onMeasure of ListView sur ceci:

 public NonScrollListView(Context context) {
        super(context);
    }

    public NonScrollListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public NonScrollListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(
                Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom);
        ViewGroup.LayoutParams params = getLayoutParams();
        params.height = getMeasuredHeight();
    }

Cette ListView ne pourra plus faire défiler et pourra être utilisée dans NestedScrollView.

0
Dipali s.

Vous ne pouvez pas faire défiler la liste dans une vue nichée. Utilisez Recyclage avec nidcroll.

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v4.widget.NestedScrollView Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    xmlns:Android="http://schemas.Android.com/apk/res/Android">
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:orientation="vertical">

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:background="@color/colorAccent"
        Android:orientation="horizontal">

        <de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.Android.com/apk/res-auto"
            Android:id="@+id/profile_image"
            Android:layout_width="76dp"
            Android:layout_height="76dp"
            Android:layout_alignParentLeft="true"
            Android:layout_alignParentStart="true"
            Android:layout_centerVertical="true"
            Android:layout_marginLeft="24dp"
            Android:layout_marginStart="24dp"
            Android:src="@drawable/profile"
            app:border_color="#FF000000" />

        <LinearLayout
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_vertical"
            Android:layout_marginLeft="20dp"
            Android:layout_toRightOf="@+id/profile_image"
            Android:gravity="center_vertical"
            Android:orientation="vertical">

            <TextView
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="IRFAN QURESHI"
                Android:textSize="20sp" />

            <TextView
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="[email protected]" />
        </LinearLayout>

        <ImageView
            Android:layout_marginLeft="50dp"
            Android:layout_gravity="center_vertical"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:src="@drawable/ic_delete_black" />
    </LinearLayout>

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center_horizontal"

        Android:background="@color/colorPrimary"
        Android:gravity="center_horizontal"
        Android:padding="30dp">

        <TextView
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_horizontal"
            Android:background="@drawable/login_email_bg_round_rect_shape"
            Android:gravity="center_horizontal"
            Android:padding="10dp"
            Android:text="POST A QUERY" />
    </LinearLayout>

        <!--<ListView
            Android:id="@+id/list"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content">
        </ListView>-->

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


    <RelativeLayout
        Android:background="@color/colorAccent"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content">
        <TextView
            Android:padding="8dp"
            Android:gravity="center_vertical"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="SIGN OUT" />
        <ImageView
            Android:paddingTop="5dp"
            Android:layout_marginRight="40dp"
            Android:layout_alignParentRight="true"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:src="@drawable/ic_delete_black" />
    </RelativeLayout>
</LinearLayout>
</Android.support.v4.widget.NestedScrollView>

</Android.support.v4.widget.NestedScrollView>
0
Irfan Qureshi

Ajoutez simplement Android: nestedScrollingEnabled = "true" dans votre NestedScrollView.

<Android.support.v4.widget.NestedScrollView
  Android:layout_width="match_parent"
  Android:layout_height="match_parent"
  Android:scrollbars="none"
  Android:nestedScrollingEnabled="true">
   <ListView
      Android:id="@+id/list_myContent"
      Android:layout_width="match_parent"
      Android:layout_height="match_parent"
      Android:scrollbars="vertical">
  </ListView>

0
Aj121

J'ai trouvé que cette solution de Prokash Sarkar fonctionnait parfaitement pour développer le contenu d'un ListView afin qu'il puisse défiler correctement dans un NestedScrollView.

Impossible de faire défiler ListView dans son parent NestedScrollView - Android

J'espère que cela aidera les autres qui recherchent NestedScrollView et ListView ..

0
steve-gregory