android ListView imbriqué

est-il possible / conseillé d'avoir un listview imbriqué?

c.-à-d. une listView qui est contenue dans une rangée d'une autre listview?

un exemple serait où ma liste principale affiche des billets de blog, et puis dans chaque rangée, vous auriez une autre vue de liste pour les commentaires pour chaque billet (qui serait pliable)

27
demandé sur Ben 2010-06-28 22:31:17

5 réponses

j'ai eu le même problème aujourd'hui, c'est donc ce que j'ai fait pour le résoudre:

j'ai une liste, avec un CustomAdapter, et sur la getView de la customAdapter, j'ai quelque chose comme ceci:

LinearLayout list = (LinearLayout) myView.findViewById(R.id.list_musics);
list.removeAllViews();

for (Music music : albums.get(position).musics) {
    View line = li.inflate(R.layout.inside_row, null);

    /* nested list's stuff */

    list.addView(line);
}

donc, en reprenant, il n'est pas possible de faire un nid à des ListViews, mais vous pouvez créer une liste à l'intérieur d'une rangée en utilisant LinearLayout et en la peuplant avec du code.

31
répondu Paulo Cesar 2011-05-12 20:00:12

Est ce que vous êtes à la recherche pour le ExpandableListView? Bien sûr, cela se limite à seulement deux niveaux d'inscriptions (mais il semble que cela fonctionnerait pour vos besoins).

10
répondu kiswa 2010-06-28 18:40:47

ressemble à ce que vous cherchez? Si vous ne l'êtes pas, ou si cela ne fonctionne pas, je suggère d'avoir deux listes de vues: l'un, disons, des billets de blog, et le second des commentaires, et une action sur un article de blog vous amène à la deuxième vue, peuplée des commentaires pertinents.

6
répondu Kris 2010-06-28 18:40:03

vous pouvez le faire comme ceci :

à l'intérieur de la ligne parent de listview XML layout ajouter la table suivante layout

   <TableLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/table_show"
        android:background="#beb4b4">
    </TableLayout>

ensuite, vous devez faire une mise en page pour la liste des enfants avec nom reply_row.xml

<?xml version="1.0" encoding="utf-8"?>
<TableRow android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="3dp"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tv_reply_row"
        android:textColor="#000"/>
</TableRow>

dans la méthode getView de votre adaptateur listview parent, ajoutez le code suivant:

TableLayout replyContainer = (TableLayout) 
// vi is your parent listview inflated view
vi.findViewById(R.id.table_show); 
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);


       //child listview contents list
        String [] replys = {"a","b","c","d"};

        for (int i=0;i<replys.length;i++)
        {
        final View comments = inflater.inflate(R.layout.reply_row, null);
        TextView reply_row = (TextView) comments.findViewById(R.id.tv_reply_row) ;
        reply_row.setText(replys[i]);

//for changing your tablelayout parameters 
        TableLayout.LayoutParams tableRowParams=new TableLayout.LayoutParams
                      (TableLayout.LayoutParams.FILL_PARENT,TableLayout.LayoutParams.WRAP_CONTENT);

        int leftMargin=3;
        int topMargin=2;
        int rightMargin=3;
        int bottomMargin=2;
        tableRowParams.setMargins(leftMargin, topMargin, rightMargin, bottomMargin);
        comments.setLayoutParams(tableRowParams);
            TableRow tr = (TableRow) comments;
            replyContainer.addView(tr);
          }
0
répondu Ahmed Esameddeen 2016-11-01 17:44:58

vous feriez mieux d'utiliser un ListView, pas imbriqué. Imiter ListView est un moyen inefficace. Votre ListView peut ne pas défiler en douceur et prendre plus de mémoire.

vous pouvez organiser votre structure de données pour afficher les données imbriquées dans un ListView. Ou vous pouvez utiliser ce projet Preordertreeeadapter. Il est commode de montrer des données imbriquées dans ListView ou RecyclerView. Il peut être utilisé pour rendre ListView ou RecyclerView pliable, il suffit de changer la façon dont vous fournissez vos données adaptateur.

0
répondu user3510029 2017-02-22 12:48:31