2012-07-18 118 views
0

我有一个列表视图,我必须动态地将数据添加到linearLayout,因为它不是每隔一行都必须具有相同数量的数据。动态添加视图到列表视图行,滚动它添加视图重复

为此,我在LiveView适配器中动态添加了textView到线性布局。 现在在滚动textview被countinued添加! 任何想法如何解决这个???

这就是我正在做的。

static class ViewHolder 
{  
    TextView itemName , itemQuantity , itemTotalPrice , attrKey , attrValue; 
    CheckBox deleteCheckbox; 
    ImageButton nextArrow; 
    LinearLayout linearLayout , attrHolder; 
} 

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

    final ViewHolder holder; 
    if(convertView == null) 
    { 
     convertView = mLayoutInflator.inflate(R.layout.basket_list,null); 
     holder = new ViewHolder(); 
     holder.itemName = (TextView) convertView.findViewById(R.id.basket_list_item_name); 
     holder.itemQuantity = (TextView) convertView.findViewById(R.id.basket_list_item_number); 
     holder.itemTotalPrice = (TextView) convertView.findViewById(R.id.basket_list_total_amount); 
     holder.nextArrow = (ImageButton) convertView.findViewById(R.id.basket_list_next_arraow); 
     holder.deleteCheckbox = (CheckBox) convertView.findViewById(R.id.basket_list_checkbox); 
     holder.linearLayout = (LinearLayout)convertView.findViewById(R.id.basket_list_atributes); 
     convertView.setTag(holder); 
    }else 
     holder = (ViewHolder) convertView.getTag(); 

    attributes = items.get(position).getAttributeVOs(); 

    holder.itemName.setText(items.get(position).getItemName()); 
    holder.itemQuantity.setText("x"+items.get(position).getItemQuantity()); 
    holder.itemTotalPrice.setText("R "+items.get(position).getItemTotalCost()); 

    if(CheckListActivity.flag) 
     holder.deleteCheckbox.setVisibility(View.VISIBLE); 
    else 
     holder.deleteCheckbox.setVisibility(View.GONE); 

    holder.deleteCheckbox.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      CheckBox cb = (CheckBox) v; 
      System.out.println("CHECKED"); 
      if(cb.isChecked()) 
       holder.deleteCheckbox.setButtonDrawable(R.drawable.checkarrow); 
      else 
       holder.deleteCheckbox.setButtonDrawable(R.drawable.unchecked); 

      checkedArray.put(position, cb.isChecked());    
     } 
    });  

    holder.nextArrow.setOnClickListener(new OnClickListener() {   
     @Override 
     public void onClick(View v) { 
      //To next activity 
     } 
    }); 


    for(int i = 0 ; i < attributes.size() ; i ++) 
    { 
     LayoutParams lparams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 

     holder.attrHolder = new LinearLayout(context); 
     holder.attrHolder.setOrientation(LinearLayout.HORIZONTAL); 
     holder.attrHolder.setLayoutParams(lparams);   


     holder.attrKey = new TextView(context); 
     holder.attrKey.setLayoutParams(lparams); 
     holder.attrKey.setText(attributes.get(i).getKey()); 
     holder.attrValue = new TextView(context); 
     holder.attrValue.setLayoutParams(lparams); 
     holder.attrValue.setText(attributes.get(i).getValues().toString()); 

     holder.attrHolder.addView(holder.attrKey); 
     holder.attrHolder.addView(holder.attrValue);      
    } 

    holder.linearLayout.addView(holder.attrHolder); 
    return convertView; 
} 
+0

看到下面的帖子http://stackoverflow.com/a/8410850/1441666 – Nirali 2012-07-18 05:50:50

回答

4

解决了删除了if(convertView == null){}否则检查。

0

不需要为For循环添加新行。 U只是更改项目列表和Listview适配器已通知方法Listview中的更改。

您只需在Google中按Listview通知更改即可。

+0

不,我不添加新行,我在A行中添加线性布局。它就像我有一个产品清单,每个产品将有不同的规格...所以这些规格我加入循环为特定行/产品 – voidRy 2012-07-18 05:31:10