2016-02-25 4 views
5

Ich habe eine App mit einer Seite erstellt, die Inhalte dynamisch aus Web-Service laden müssen. Ich möchte eine Listenansicht haben, die zusammen mit einem linearen Layout innerhalb von NestedScrollView scrollen kann. Wenn der Inhalt jedoch in die Listenansicht geladen wird, wird er nicht auf seine volle Höhe gekratzt.Wie kann ich eine ListView innerhalb einer NestedScrollView haben

Hier ist mein Code.

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.NestedScrollView 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" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="com.myquestionth.myquestionth10.Profile2Activity" 
    tools:showIn="@layout/activity_profile2"> 

    <LinearLayout 
     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:orientation="vertical"> 

      <ImageView 
       android:layout_width="match_parent" 
       android:layout_height="400dp" 
       android:background="#BBBBBB" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceLarge" 
       android:text="Media heading" 
       android:id="@+id/textView2" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:text="Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis." 
       android:id="@+id/textView8" /> 

     </LinearLayout> 

     <ListView 
      android:id="@+id/listView" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="#70bcf5" /> 

    </LinearLayout> 

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

Ich habe einige gesuchte über scrollview kann nicht verschachtelt werden. Dies ist ein Beispiel, das ich nach meinem Layout von Google Play Review Seite gestalten möchte. Was für eine Methode benutzen sie? Schlage mich vor, wenn ich etwas falsch mache. Danke vielmals.

enter image description here

Hier ist, was ich will.

enter image description here

+1

Fix die Höhe der Listview.Oder der beste Weg ist, Coordinatorlayout und Recyclerview.Refer [This] (http://inthecheesefactory.com/blog/android-design-support-library-codelab/en) –

Antwort

4

Nun möchte ich Ihnen zwei Möglichkeiten vorschlagen, dieses Problem zu lösen:

1) Versuchen Sie, einen Header Ihrer Listview zu machen Linearlayout. Beachten Sie, dass die Kopfzeile so aufgepumpt werden sollte, wie sie geschrieben wurde here.

2) Sie haben erwähnt, dass Sie NestedScrollView verwenden, so sollten Sie vielleicht auch versuchen, mit Listview-Linearlayout, wie weise Menschen here vorgeschlagen innen Nested Scroll zu ersetzen, Reihe Ansichten in Schleife Hinzufügen ähnlich, wie der Adapter funktioniert.

Viel Glück!

1

Statt einen Listview unter einem Linear-Layout hinzufügen und in einem Scrollview, würde ich vorschlagen, alles innerhalb des Listview zu setzen.

Ja, Sie können.

Implementieren (gekröpft) folgende Methode auf Ihrem Adapter:

public class MyAdapter extends BaseAdapter { 
    // One view to Header 
    // One view to filter options ("most helpful first" and "Options") 
    // One view to comments 
    private final static int VIEW_HEADER = 0; 
    private final static int VIEW_OPTIONS = 1; 
    private final static int VIEW_COMMENTS = 2; 
    private final static int VIEW_TYPE_MAX = 3; 

    @Override 
    public int getViewTypeCount() { 
     // It will return 3 since I have 3 different types of VIEW 
     return VIEW_TYPE_MAX; 
    } 

    @Override 
    public int getItemViewType(int position) { 
     if (position == 0) 
      return VIEW_HEADER; 
     else if (position == 1) 
      return VIEW_OPTIONS; 
     else 
      return VIEW_COMMENTS; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      if(getItemViewType(position) == VIEW_HEADER) 
       // Inflate HEADER Layout 
      else if (getItemViewType(position) == VIEW_OPTIONS) 
       // Inflate Options Layout 
      else 
       // Inflate comments Layout 
     } 

     // Fill the view contents according to its type 
     .... 
     return convertView; 
    } 
} 

Android wird die Ansichten wiederverwenden. Android verwendet jedoch immer wieder Ansichten desselben Typs.

+0

Dank Guiherme Ich werde das versuchen. – Marcus

+0

Sie sind willkommen .. Versuchen Alex Pepper Antwort auch ... es scheint einfacher – W0rmH0le

3

auf Lollipop ab können Sie diese

yourtListView.setNestedScrollingEnabled(true); 

aktivieren oder deaktivieren verschachtelte Scrollen für diese Ansicht wenn Sie Version des OS älter müssen verwenden die Abwärtskompatibilität mit Ihnen die RecyclerView verwenden musst.

+0

[Kredit] (https://stackoverflow.com/a/35198484/4015799) an den ursprünglichen Beantworter. –