2015-04-29 123 views
0

在我的listView我有3行類型,TXT,IMG,SMS。每個人都有不同的行佈局和正常工作是這樣的:Android ListView - 添加動態行到行

... extends BaseAdapter ... 

public View getView(int position, View convertView, ViewGroup parent) { 

    TextViewHolder textViewHolder = null; 
    ImageHolder imageHolder = null; 
    SmsHolder smsHolder = null; 
    //PlaceHolder placeHolder = null; 

    ConversionModel conversion = getItem(position); 
    int type = conversion.type; 

    if (convertView == null) { 
     if(type == ConversionModel.TXT) { 
      textViewHolder = new TextViewHolder(); 

      convertView = mInflater.inflate(R.layout.convers_txt, null); 
      textViewHolder.textView = (TextView)convertView.findViewById(R.id.row_txt); 

      convertView.setTag(textViewHolder); 
     } 

     if(type == ConversionModel.IMG) { 
      imageHolder = new ImageHolder(); 

      convertView = mInflater.inflate(R.layout.convers_img, null); 
      imageHolder.img = (ImageHolder)convertView.findViewById(R.id.row_txt); 

      convertView.setTag(textViewHolder); 
     } 
     .... 
    } 

    ... 

    } 

我的目的是:

-alllist----------- 
----txt------------ 
----img------------ 
-----(multipledata) //placeholder must has dynamic rows in it 
--------button----- 
--------button----- 
---sms------------- 
..... 

我的佔位符必須有動態的行,因爲我不知道數據的數字,來自服務器。我試圖做到這一點嵌套的ListView但它只shows first data in the list.

而且我把LinearLayoutplaceHolder並添加這樣的(僞)項目:

for data in datas { 
    Button btn = new Button(ctx) 
    ... 
    placeHolder.layout.addView(btn); 
} 

但每當我滾動listViewgetView方法是搞亂和當它應該是2-3時,它會呈現相同的按鈕將近10-20次。

我該如何做到這一點?我查看了像Telegram這樣的應用源,但找不到類似的方法。

解決方案:

String arr[] = conversion.message.split(Pattern.quote("$$")); 

LinearLayout layHolder = new LinearLayout(ctx); 

for (int i = 0; i < arr.length; i++) { 
     Button test_btn = new Button(ctx); 
     //PlaceModel pm = new PlaceModel(arr[i]); 
     layHolder.addView(test_btn); 
} 

    placeHolder.linearLay.removeAllViews(); //<- THIS 
    placeHolder.linearLay.addView(layHolder); 
+0

添加以下主要內容(圖片或文字)的線性佈局,並在線性佈局添加按鈕。 – Harry

+0

感謝您的幫助,現在就試試。 – Lazy

回答

1

在你的孩子佈局添加一個線性佈局是這樣的:(用於演示中,我已經添加了令人不解的孩子一個按鈕,甚至孩子位置的兩個按鈕)

...  
    <!--main linear layout contnet--> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/textView" /> 

    <LinearLayout 
     android:id="@+id/layout" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" /> 

在getView

()

...   
     LinearLayout layout = (LinearLayout) view.findViewById(R.id.layout); 

    //important line 
    layout.removeAllViews(); 

    if (position % 2 == 0) 
     { 
      Button b1 = new Button(_context); 
      b1.setText("B1"); 
      layout.addView(b1); 
     } 
     else 
     { 
      Button b1 = new Button(_context); 
      b1.setText("B1"); 
      layout.addView(b1); 
      Button b2 = new Button(_context); 
      b2.setText("B2"); 
      layout.addView(b2); 
     } 
:並添加按鈕就
+0

我試過這個解決方案。當我向下滾動時,而不是2-3,按鈕添加了10-20次。正如我所說的getView方法正在搞亂這個解決方案。 – Lazy

+0

感謝哈利,但它不工作,同樣的問題。 – Lazy

+0

對不起,我試圖擴展列表,但我更新了列表視圖,它正確地添加按鈕在視圖中。如果你希望我可以發佈截圖。 – Harry

0

實現適配器兩種方法

public int getItemViewType(position){ 
    int type = getItem(position).get type(); 
    return type == ConversionModel.TXT ? 0 : type == ConversionModel.IMG ? 1 : 2; 
} 

public int getViewTypeCount(){ 
     return 3; 
    } 

將解決你的問題

+0

我已經在檢查類型。無論如何,現在我試圖切換ExpandableListView。 – Lazy

+0

您正在檢查getView()中的視圖類型,適配器負責膨脹視圖,這就是爲什麼您在任何視圖類型內添加子視圖後都面臨問題。這些方法告訴適配器您正在使用多個視圖。 –

+0

正如我所說我已經檢查「類型」和你的解決方案沒有幫助。但是,謝謝哈里斯。 – Lazy