2016-10-21 3 views
-5

Hier ist meine XML-Layout-Datei, in der ich scrollview als Eltern verwenden, in der Listenansicht verlor ihre Scroll-Eigenschaft .. bitte schlagen Sie mir vor, was zu tun .. warum listview ihre Eigenschaft des Scrollens verloren StandardScrollview funktioniert nicht auf Listview mit anderen Ansicht

<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:tools="http://schemas.android.com/tools" 
       android:layout_width="match_parent" 
       android:fillViewport="true" 
       android:layout_height="match_parent">  
       <RelativeLayout 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"> 
         <TextView 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:layout_alignParentRight="true" 
          android:layout_centerHorizontal="true" 
          android:layout_marginRight="10dp" 
          android:text="Edit Order" 
          android:layout_marginTop="5dp" 
          android:id="@+id/txtyourOrder" 
          android:textColor="@android:color/holo_green_dark" />  
         <TextView 
          android:id="@+id/textView" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:text="Your Order" 
          android:layout_marginLeft="10dp" 
          android:textColor="@android:color/black" 
          android:textSize="20sp" />   
        <View 
         android:id="@+id/view1" 
         android:layout_below="@id/txtyourOrder" 
         android:layout_width="match_parent" 
         android:layout_height="0.5dp" 
         android:layout_marginTop="10dp" 
         android:background="@android:color/darker_gray" /> 
        <ListView 
         android:layout_below="@id/view1" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:nestedScrollingEnabled="true" 
         android:layout_marginTop="10dp" 
         android:id="@+id/listview" 
         android:textColor="@android:color/darker_gray" />   
        <TextView 
         android:layout_below="@id/listview" 
         android:id="@+id/txtAddItems" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:gravity="center_horizontal" 
         android:layout_marginTop="10dp" 
         android:text="Add Items" 
         android:textColor="@android:color/holo_green_dark" /> 

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

Bitte helfen Sie mir!

Antwort

1

Die kürzeste & einfachste Lösung für das Listview innerhalb eines Scroll Problem.

Sie müssen nichts Besonderes in der Datei layout.xml tun und auch nichts auf der übergeordneten ScrollView behandeln. Sie müssen nur mit dem untergeordneten ListView arbeiten. Sie können diesen Code auch verwenden, um einen beliebigen Typ von untergeordneten Ansichten in einem ScrollView & Touch-Operationen zu verwenden.

einfach diese Zeilen Code in Ihre Java-Klasse hinzufügen:

ListView lv = (ListView) findViewById(R.id.layout_lv); 
lv.setOnTouchListener(new OnTouchListener() { 
    // Setting on Touch Listener for handling the touch inside ScrollView 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
    // Disallow the touch request for parent scroll on touch of child view 
    v.getParent().requestDisallowInterceptTouchEvent(true); 
    return false; 
    } 
}); 

Wenn Sie Listview innerhalb eines Scroll setzen dann alle Listview nicht auf seine volle Höhe dehnt. Unten ist eine Methode, um dieses Problem zu beheben.

/**** Method for Setting the Height of the ListView dynamically. 
**** Hack to fix the issue of not showing all the items of the ListView 
**** when placed inside a ScrollView ****/ 
public static void setListViewHeightBasedOnChildren(ListView listView) { 
    ListAdapter listAdapter = listView.getAdapter(); 
    if (listAdapter == null) 
     return; 

    int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.UNSPECIFIED); 
    int totalHeight = 0; 
    View view = null; 
    for (int i = 0; i < listAdapter.getCount(); i++) { 
     view = listAdapter.getView(i, view, listView); 
     if (i == 0) 
      view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, LayoutParams.WRAP_CONTENT)); 

     view.measure(desiredWidth, MeasureSpec.UNSPECIFIED); 
     totalHeight += view.getMeasuredHeight(); 
    } 
    ViewGroup.LayoutParams params = listView.getLayoutParams(); 
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); 
    listView.setLayoutParams(params); 
} 

zur Anwendung dieses Verfahrens nur das Listview innerhalb dieser Methode übergeben:

ListView list = (ListView) view.findViewById(R.id.ls); 
setListViewHeightBasedOnChildren(list); 
1

Wie definiert here ..

Sie sollten nicht ein Listview in einem Scrollview setzen, weil die Listview-Klasse ihre eigene Rolle im implementiert und es funktioniert einfach nicht Gesten erhalten, weil sie alle von den Eltern behandelt werden Scroll. Ich empfehle Ihnen dringend, Ihr Layout irgendwie zu vereinfachen. Sie können zum Beispiel Ansichten, die Sie scrollen möchten, als Kopf- oder Fußzeilen in die ListView einfügen.

+1

Dank sir für Praktische Infos ... – kunal

1

Wenn Sie ListView verwenden möchten, verwenden Sie einfach das Co-Ordinator-Layout als root und gestalten Sie Ihr Layout entsprechend.

Sie können auch Header auf Listview wie folgt hinzu:

LayoutInflater inflater = getLayoutInflater(); 
ViewGroup headerView = (ViewGroup)inflater.inflate(R.layout.header, 
listview, false); 
myListView.addHeaderView(headerView, null, false); 
Verwandte Themen