2016-02-25 18 views
5

Mam utworzoną aplikację ze stroną, która musi dynamicznie ładować zawartość z usługi WWW. Chcę mieć listview, który można przewijać razem z liniowym układem wewnątrz NestedScrollView. Ale kiedy zawartość jest załadowana do listy, nie jest zadrapana do pełnej wysokości.Jak mogę mieć ListView wewnątrz NestedScrollView

Oto mój kod.

<?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> 

Mam kilka wyszukiwane o scrollview nie mogą być zagnieżdżone. To jest przykład, który chcę, zgodnie z moim projektowaniem layoutu ze strony recenzji Google Play. Jaką metodę używają? Zaproponuj mi, jeśli coś zrobię źle. Wielkie dzięki.

enter image description here

Oto, czego chcę.

enter image description here

+1

ustalić wysokość listview.Or Bestway jest użycie coordinatorlayout i recyclerview.Refer [to], (http://inthecheesefactory.com/blog/android-design-support-library-codelab/en) –

Odpowiedz

4

Cóż, chciałbym zaproponować Ci 2 sposoby, aby rozwiązać ten problem:

1) Postaraj się LinearLayout nagłówek Twojego ListView. Zauważ, że nagłówek powinien być zawyżony, ponieważ jest napisany here.

2) Wspomniałeś, że używasz NestedScrollView, więc może warto też spróbować wymienić ListView wewnątrz zagnieżdżone Scrollview z LinearLayout, jak mądrzy ludzie zasugerował here, dodając widoki wierszy w pętli podobny do tego, jak swoich prac adaptera.

Powodzenia!

1

Zamiast dodać ListView poniŜej Układ liniowy i wewnątrz Scrollview, chciałbym zaproponować, aby umieścić wszystko wewnątrz ListView.

Tak, można.

Wdrożenie (override) następującą metodę na karty:

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 będzie ponownie użyć widoki. Jednak Android zawsze będzie używał widoków tego samego typu.

+0

Dzięki Guiherme spróbuję tego. – Marcus

+0

Nie ma za co .. Spróbuj odpowiedzi Alex Pepper ... wydaje się prostsze – W0rmH0le

3

na Lollipop roku można użyć

yourtListView.setNestedScrollingEnabled(true); 

to włączyć lub wyłączyć przewijanie zagnieżdżony dla tego widoku jeśli trzeba wsteczną kompatybilność ze starszą wersją systemu operacyjnego trzeba będzie użyć RecyclerView.

+0

[Credit] (https://stackoverflow.com/a/35198484/4015799) do oryginalnego odpowiadającego. –

Powiązane problemy