2016-02-25 26 views
5

Ho creato un'app con una pagina che ha bisogno di caricare il contenuto dinamicamente dal servizio web. Voglio avere list list che può scorrere insieme con un layout lineare all'interno di NestedScrollView. Ma quando il contenuto viene caricato in listview, non si graffia fino alla sua altezza completa.Come posso avere un ListView all'interno di NestedScrollView

Ecco il mio codice.

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

Ho qualche ricerca su scrollview non può essere annidato. Questo è un esempio che voglio in base al mio layout di progettazione dalla pagina di revisione di Google Play. Quale metodo usano? Suggeriscimi se faccio qualcosa di sbagliato. Grazie molto.

enter image description here

Ecco quello che voglio.

enter image description here

+1

Correggere l'altezza della listview.Or il bestway è utilizzare coordinatorlayout e recyclerview.Refer [questo] (http://inthecheesefactory.com/blog/android-design-support-library-codelab/en) –

risposta

4

Beh, vorrei suggerire di 2 modi per risolvere questo problema:

1) Provate a fare LinearLayout un colpo di testa del vostro ListView. Si noti che l'intestazione deve essere gonfiato come è scritto here.

2) Lei ha detto che si utilizza NestedScrollView, quindi forse si dovrebbe anche provare a sostituire ListView all'interno nidificato ScrollView con LinearLayout, come persone sagge suggerito here, aggiungendo viste fila in anello simile a come le tue opere di adattamento.

Buona fortuna!

1

Invece di aggiungere un ListView sotto un layout lineare e all'interno di una ScrollView, vorrei suggerire di mettere tutto dentro la ListView.

Sì, è possibile.

Implementare (override) seguente metodo sulla scheda:

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 si ri-utilizzare i punti di vista. Tuttavia, Android utilizzerà sempre le viste dello stesso tipo.

+0

Grazie Guiherme lo proverò – Marcus

+0

Siete i benvenuti .. Prova anche la risposta di Alex Pepper ... sembra più semplice – W0rmH0le

3

su Lollipop in poi è possibile utilizzare

yourtListView.setNestedScrollingEnabled(true); 

Questo abilitare o disabilitare lo scorrimento nidificato per questa vista se avete bisogno di compatibilità con la versione precedente del sistema operativo si dovrà utilizzare il RecyclerView.

+0

[Credito] (https://stackoverflow.com/a/35198484/4015799) al rispondente originale. –