2010-06-28 176 views
27

是否有可能/建議有一個嵌套的listview?android嵌套列表視圖

即包含在另一個listview的行內的listView?

一個例子就是,我的主要列表顯示的博客文章,然後在每一行中,你必須爲每個崗位的註釋的另一列表視圖(這將是可摺疊)

回答

31

今天我有同樣的問題,所以這是我做過什麼來解決這個問題:

我有一個ListView,具有CustomAdapter,並在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's stuff */ 

    list.addView(line); 
} 

因此,恢復,不可能嵌套到ListViews,但您可以使用LinearLayout在行內創建一個列表並使用代碼填充它。

+0

列表監聽器不能正常工作。任何解決方案 – 2014-04-10 17:01:39

+0

謝謝隊友。好主意啊。 – 2015-03-02 13:31:32

+0

我想在列表中實現列表,但我不能實現.is有解決此問題的任何替代方法嗎?除了Expandable ListView – seon 2017-06-05 06:27:10

6

This聽起來像什麼您正在尋找?如果你不是,或者這不起作用,我會建議擁有兩個列表視圖:其中一個是博客帖子,另一個是評論,而對博客文章項目的操作會將你帶到第二個視圖,並填寫相關評論。

+0

不幸的是,我們想要顯示內嵌評論...所以在另一個活動中打開它們不會工作。 – Ben 2010-06-28 18:44:10

10

是你在找什麼ExpandableListView?當然,這僅限於兩層清單(但聽起來像是可以滿足您的需求)。

+0

好吧,事情是,我不希望列表是exapandible ...我只是想顯示一些嵌套的數據...即原來的博客文章,然後2/3最近的評論,也許跟着一個'顯示所有評論'按鈕... – Ben 2010-06-28 22:42:13

+0

這聽起來像一個不同的佈局給我。我將它看作是某種類型的容器(LinearLayout,RelativeLayout,其他),其中包含用於博客文章的TextView,以及用於評論的ListView。只需將前幾個註釋加載到列表視圖中,併爲最後一個加載剩餘註釋的列表項實現一個點擊監聽器。無論如何,我的$ .02。 – kiswa 2010-06-28 23:19:55

+0

好,除了每篇博客文章都會有多篇博文和多篇評論。所以我嘗試了一個測試,通過讓我的行視圖佈局包含一個列表視圖,然後我使用了一個簡單的數組列表適配器w /一些硬編碼的虛擬字符串,以查看是否可以讓它呈現。它呈現,內部列表視圖似乎有滾動條,但該列表不滾動。它看起來像一個黑客入侵的iframe,除了它只顯示第一行,無論我做了什麼。即使height = fill_parent也不行。我的下一個方法是嘗試嵌套在列表中的表視圖。 – Ben 2010-06-29 01:01:59

0

,你可以做這樣的:

父列表視圖行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> 
在你父母的ListView適配器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); 
      } 
0

您最好使用一個ListView,而不是嵌套。嵌套ListView是一種低效率的方式。您的ListView可能無法順利滾動並佔用更多內存。

您可以組織您的數據結構以在一個ListView中顯示嵌套的數據。或者你可以使用這個項目PreOrderTreeAdapter。 在ListView或RecyclerView中顯示嵌套數據很方便。它可以用來使ListView或RecyclerView可摺疊,只是改變提供數據的方式而不是通知適配器。