2016-10-12 6 views
3

Ich habe ein Fragment aus Sichtpager aufgebläht, die die Listview verwendet. Die Listenansicht unterstützt setNestedScrollingEnabled nicht in Pre-Lollipop-Geräten. Also habe ich die Listview innerhalb einer NestedScrollView hinzugefügt, aber beim Scrollen der Liste scrollt sie nicht.ListView scrollt nicht innerhalb von NestedScrollView in Android

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:id="@+id/fragment_item_view" 
    android:background="@color/white" 
    android:isScrollContainer="true"> 

<ProgressBar 
    style="?android:attr/progressBarStyle" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/progressBar" 
    android:layout_centerInParent="true" /> 

<android.support.v4.widget.SwipeRefreshLayout 
    android:id="@+id/swipe_refresh_layout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 
    <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_item_view" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:scrollbars="vertical" 
      android:clipToPadding="false" 
      android:divider="@color/gray_stroke_color" 
      android:dividerHeight="0.5dp" 
      android:paddingBottom="@dimen/padding_64dp"    > 
     </ListView> 

    </android.support.v4.widget.NestedScrollView> 

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

</RelativeLayout> 

Kann mir jemand irgendeine Lösung vorschlagen. Danke im Voraus.

+1

Verwenden Sie RecyclerView anstelle von ListView –

+0

Dies ist die letzte Lösung, die ich kenne. Aber es gibt ein großes Nein. der Listenansicht in meinem Projekt. Sie alle zu verändern, ist zeitaufwendig. Es wird also toll sein, wenn mir jemand bei der Listenansicht helfen kann. –

+1

Sie benötigen scrollView nicht über listView, da listview über einen eigenen Bildlauf verfügt – Beloo

Antwort

2

Versuchen Sie es mit

setNestedScrollingEnabled(true); 
+0

setNestedScrollingEnabled (true); arbeitet nur mit der api-level 21 oder höher. Ich spreche über die API-Ebene unter 21. –

1

Ich bin nicht sicher, warum Sie ein Listview in einem Scrollview verwenden möchte, wenn es über die gesamte Höhe/Breite einnehmen davon Eltern.

Ich würde vorschlagen, nur die ListView im Root-Layout Ihres Fragments zu verwenden und die ScrollView zu beseitigen.

<android.support.v4.widget.SwipeRefreshLayout 
android:id="@+id/swipe_refresh_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <ListView 
     android:id="@+id/list_item_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scrollbars="vertical" 
     android:clipToPadding="false" 
     android:divider="@color/gray_stroke_color" 
     android:dividerHeight="0.5dp" 
     android:paddingBottom="@dimen/padding_64dp"/> 

    </ListView> 

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

Außerdem würde ich mit RecyclerView statt Listview als es NestedScrollingChild implementiert.

Wenn Sie jedoch geschachtelte Bildlaufansichten in Ihrem Layout festgelegt haben, müssen Sie verstehen, dass NestedScrollView während der Liste als übergeordnete oder untergeordnete Bildlaufansicht arbeiten soll. Hier ist ein gutes Beispiel für eine Scrollview mit 2 anderen scrollviews:

<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

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

    <android.support.v4.widget.NestedScrollView 
      android:layout_width="match_parent" 
      android:layout_height="100dp"> 

     <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"/> 

    </android.support.v4.widget.NestedScrollView> 

    <android.support.v4.widget.NestedScrollView 
      android:layout_width="match_parent" 
      android:layout_height="100dp"> 

     <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"/> 

    </android.support.v4.widget.NestedScrollView> 

</LinearLayout> 
</ScrollView> 

Auch ich bemerkt, dass Sie vielleicht mit CoordinatorLayout, weil Sie das Layout Verhalten Ihres Kindes Ansichten festlegen. Wenn dies der Fall ist, müssen Sie nur die 'app: layout_behavior = "@ string/appbar_scrolling_view_behavior" für Ihre Hauptansicht und nur für ScrollView angeben: Ein ListView, RecyclerView oder NestedScrollView.

0

Sie haben das Berührungsereignis für smooth scrolling

outerScrollView.setOnTouchListener(new View.OnTouchListener() { 

      public boolean onTouch(View v, MotionEvent event) { 
       findViewById(R.id.inner_scroll).getParent() 
         .requestDisallowInterceptTouchEvent(false); 
       return false; 
      } 
     }); 

     innerScrollView.setOnTouchListener(new View.OnTouchListener() { 

      public boolean onTouch(View v, MotionEvent event) { 
       v.getParent().requestDisallowInterceptTouchEvent(true); 
       return false; 
      } 
     }); 
0

Verwenden ViewCompat.setNestedScrollingEnabled() und Ihr Problem gelöst werden abzufangen.

Verwandte Themen