андроид вложенный список - PullRequest
28 голосов
/ 28 июня 2010

возможно ли / желательно иметь вложенный просмотр списка?

то есть просмотр списка, который содержится в строке другого просмотра списка?

пример может быть, когда мой основной список отображает сообщения блогаи затем в каждой строке у вас будет другое представление списка для комментариев к каждому сообщению (это будет складным)

Ответы [ 5 ]

31 голосов
/ 13 мая 2011

У меня была такая же проблема сегодня, поэтому я решил ее:

У меня есть ListView с CustomAdapter, и в getView customAdapter у меня есть что-то вроде этого:

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);
}

Итак, возобновляя, невозможно вложить в ListViews, но вы можете создать список внутри строки с помощью LinearLayout и заполнить его кодом.

11 голосов
/ 28 июня 2010

Это то, что вы ищете для ExpandableListView ?Конечно, это ограничено только двумя уровнями списков (но, похоже, это будет работать для ваших нужд).

6 голосов
/ 28 июня 2010

Это звучит как то, что вы ищете? Если это не так, или если это не работает, я бы предложил два вида списка: один из, скажем, сообщений в блоге, а второй из комментариев, и действие над элементом сообщения в блоге переводит вас во второй вид. , заполненный соответствующими комментариями.

0 голосов
/ 22 февраля 2017

Вам лучше использовать один ListView, а не вложенный.Вложение ListView - неэффективный способ.Ваш ListView может не прокручиваться плавно и занимать больше памяти.

Вы можете организовать свою структуру данных для отображения вложенных данных в одном ListView.Или вы можете использовать этот проект PreOrderTreeAdapter .Вложенные данные удобно показывать в ListView или RecyclerView.Его можно использовать для свертывания ListView или RecyclerView, просто измените способ предоставления данных, а не уведомляйте адаптер.

0 голосов
/ 01 ноября 2016

вы можете сделать это так:

внутри XML-макета строки родительского списка добавьте следующий макет таблицы

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

тогда вы должны сделать макет для дочернего списка с именем 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>

в методе getview вашего родительского адаптера списка добавьте следующий код:

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);
          }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...