Подтвердить что ты не робот

Список вложенных списков в Android

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

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

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

4b9b3361

Ответ 1

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

У меня есть ListView с CustomAdapter и в getView пользовательского адаптера, у меня есть что-то вроде этого:

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 stuff */

    list.addView(line);
}

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

Ответ 2

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

Ответ 3

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

Ответ 4

вы можете сделать это следующим образом:

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

   <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-адаптера listview добавьте следующий код:

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

Ответ 5

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

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