2013-04-04 99 views
0

單擊一個項目我有一個自定義適配器從arrayadapter延伸:如何刷新列表視圖當列表視圖

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

    final ViewHolder holder; 

    if (convertView == null) { 
     LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
       Context.LAYOUT_INFLATER_SERVICE); 
     convertView = vi.inflate(R.layout.list_item, null); 

     holder = new ViewHolder(); 
     holder.tvName = (TextView) convertView.findViewById(R.id.tvName); 
     holder.tvPrice = (TextView) convertView.findViewById(R.id.tvPrice); 
     holder.ivItem = (ImageView) convertView.findViewById(R.id.ivItem); 
     holder.ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon); 
     holder.ivArrow = (ImageView) convertView.findViewById(R.id.ivArrow); 

     convertView.setTag(holder); 

    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.tvName.setText(item.get(position).getName()); 
    holder.tvPrice.setText(item.get(position).getPrice()); 
    holder.ivItem.setImageBitmap(item.get(position).getAvatar()); 
    holder.ivArrow.setImageDrawable(item.get(position).getArrow()); 
    holder.ivIcon.setImageDrawable(item.get(position).getIcon()); 


      holder.ivIcon.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 

     /*...My code...*/ 
    } 
    }); 

    return convertView; 
} 

我嘗試點擊項目ivIconlistview一行將被刪除,listview應該刷新,但我沒有辦法刷新listview。我需要幫助

回答

1

你的選擇是:

  • 使用一個ArrayAdapter的修改底層列表(添加,插入,刪除,清除等)
  • 重新創建與一個ArrayAdapter功能新的列表數據。 (使用大量資源和垃圾回收。)
  • 創建自己的派生自BaseAdapter和ListAdapter的類,它允許更改基礎List數據結構。
  • 每次列表更新時都使用notifyDataSetChanged。要在UI線程上調用它,請使用Activity的runOnUiThread方法。那麼notifyDataSetChanged將起作用。

final ArrayAdapter adapter = ((ArrayAdapter)getListAdapter()); 
runOnUiThread(new Runnable() { 

    public void run() { 
     adapter.notifyDataSetChanged(); 
    } 
}); 
+0

我必須使用線程例如更新列表的變化是什麼時候? – rocky 2013-04-04 10:38:25

+1

無法刷新getView()中的適配器? – rocky 2013-04-04 10:45:38

+0

它有幫助,謝謝 – rocky 2013-04-04 19:52:03

0

此代碼將幫助你。

假設您有適配器像

ListView = listview; 
customListView mcustomListView = new customListView(this); 

當您在getView

holder.ivIcon.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 

     customListView mcustomListView = (customListView) mlvItem.getAdapter(); 
mcustomListView .notifyDataSetChanged(); 

     } 
    } 
點擊列表項