2011-09-27 6 views
2

Je veux avoir un listview contenant du contenu. Et en dessous, lorsque vous faites défiler jusqu'à la fin de la liste, un nouvel en-tête serait affiché suivi d'une nouvelle vue de liste. Est-ce possible? // Éditer Les deux listview doivent avoir un layout xml différent.Listview ci-dessous listview android

J'ai essayé de mettre la deuxième liste dans une vue de la première. Mais alors la deuxième liste est petite.

Voici ma mise en page

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

     <LinearLayout android:id="@+id/header" 
      android:background="@drawable/app_topbar" android:layout_width="fill_parent" 
      android:orientation="horizontal" android:layout_height="wrap_content" 
      android:layout_alignParentTop="true"> 

      <TextView android:text="@string/headline_notused" 
       android:gravity="center" android:textSize="24sp" android:textStyle="bold" 
       android:textColor="@color/txtcolor" android:layout_width="fill_parent" 
       android:layout_height="fill_parent"></TextView> 

     </LinearLayout> 

     <ProgressBar android:layout_width="fill_parent" 
      android:layout_height="wrap_content" android:layout_below="@+id/header" 
      android:visibility="gone" style="?android:attr/progressBarStyleHorizontal" 
      android:id="@+id/progressbarHorizontal" /> 

     <ListView android:id="@+id/notUsedList" android:divider="@android:color/transparent" 
      android:dividerHeight="5dip" android:layout_height="wrap_content" 
      android:layout_marginBottom="5dip" android:layout_width="fill_parent" 
      android:layout_weight="1" 
      android:layout_below="@+id/progressbarHorizontal"></ListView> 

     <LinearLayout android:orientation="vertical" 
      android:layout_below="@+id/notUsedList" android:background="@drawable/app_background" 
      android:layout_marginBottom="55dip" android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 

      <LinearLayout android:id="@+id/myUsedHeader" 
       android:background="@drawable/app_topbar" android:layout_marginTop="10dip" 
       android:layout_width="fill_parent" android:orientation="horizontal" 
       android:layout_height="wrap_content" android:layout_alignParentTop="true"> 

       <TextView android:text="@string/headline_used" android:gravity="center" 
        android:textSize="24sp" android:textStyle="bold" android:textColor="@color/txtcolor" 
        android:layout_width="fill_parent" android:layout_height="fill_parent"></TextView> 

      </LinearLayout> 

      <ListView android:id="@+id/usedList" 
       android:divider="@android:color/transparent" android:dividerHeight="5dip" 
       android:layout_height="fill_parent" android:layout_width="fill_parent"></ListView> 

     </LinearLayout> 
</RelativeLayout> 
+0

Vous définissez la mise en page pour la liste et les éléments de liste lorsque vous initiez l'adaptateur. Je ne comprends pas le problème ... votre première liste n'a rien à voir avec le second sauf pour le dire quand il atteint le dernier élément de la liste. – rf43

+0

Je ne comprends pas votre ned: voulez-vous remplacer votre listview par un nouveau ou faire en sorte que votre listview précédente soit plus longue en ajoutant des éléments avec une disposition de ligne différente? –

+0

rallonge ma listview précédente en ajoutant des éléments avec une disposition de ligne différente. J'ai également besoin d'ajouter un nouvel en-tête. Désolé s'il est difficile à comprendre :) – Casper

Répondre

2

Vous voulez dire listview avec différentes sections et chaque section ayant un en-tête. Essayez ce lien Jeff sharkey adapter

+0

Est-il possible de modifier la disposition, de sorte que les deux listview exécutent des dispositions différentes? – Casper

+0

Vous voulez dire que les lignes des deux listes doivent avoir une disposition différente. Bien sûr que cela peut être fait. – anujprashar

+0

Je me suis mis au travail, un endroit où j'en avais besoin, c'était génial. Mais dans une autre activité, j'avais aussi besoin de changer l'arrière-plan derrière la listview. Ici j'ai fini par mettre la deuxième listview dans la vue d'ensemble de la première, et ensuite je code derrière moi en calculant la hauteur de 1 item * arraylist.size() dans dp, et cela a aussi fonctionné. Alors merci pour les repleys. – Casper

1

Vous devez détecter quand vous arrivez au listview dernier élément.

Ensuite, vous pouvez changer votre adaptateur, l'activité de changement ou wathever vous trouvez approprié pour afficher la nouvelle ListView:

Mettre en oeuvre un OnScrollListener, définissez votre l » onScrollListenerListView et vous devriez être en mesure de gérer les choses correctement.

Par exemple:

// Initialization stuff. 
yourListView.setOnScrollListener(this); 

// ... ... ... 

@Override 
public void onScroll(AbsListView lw, final int firstVisibleItem, 
       final int visibleItemCount, final int totalItemCount) { 

    switch(lw.getId()) { 
     case android.R.id.list:  

      final int lastItem = firstVisibleItem + visibleItemCount; 
      if(lastItem == totalItemCount) { 
       // Last item is fully visible. You will then need to start a New activity, maybe... Or change the layout.. I don't know! 
      } 
    } 
} 
+0

Okay, et est-il possible de changer la mise en page xml aussi? – Casper

+0

Oui, bien sûr, vous devrez juste changer votre adaptateur. Je ne connais pas votre application, mais personnellement, je voudrais commencer une nouvelle activité avec une nouvelle Listview ... Mais si votre besoin est de rester dans la même activité, faites juste quelque chose comme: getListView(). SetAdapter (new YourAdapter (blabla)); –

+0

@casper: des nouvelles? Est-ce que ça marche? –

0

oui il est possible. vous pouvez définir une listview dans linearlayout et onether dans une autre linearlayout et placer les deux dans LinearLayout parent.

+0

Il doit être linearlayout? Parce que j'ai un scrollproblem en ce moment. J'essaie aussi de mettre la dernière listview dans le footview au premier, mais ça ne marche pas. – Casper

+0

android: minHeight = "? Android: attr/listPreferredItemHeight" utilise ceci dans la propriété de listview cela résoudra le problème de scrollview. –

+0

OK sur les deux listes? – Casper