實現動態修改ListView中某個Item裡的元件值
1.理解ListView及GridView檢視複用的機制Adapter+靜態ViewHolder的方式可以參照
http://www.myandroidsolutions.com/2012/07/19/android-listview-with-viewholder-tutorial/
2.GridView防止記憶體溢位問題實現的檢視複用的方法,只建立當前螢幕所顯示的幾條內容View,不會為每條內容都建立檢視
在定義ViewHolder時多新增一個引數tag
public static class ViewHolder{
ImageViewmagazine_item_foreground_image;
ImageViewmagazine_item_free_image;
ImageViewmagazine_item_image;
TextViewcolumnName;
Stringtag;
}
在自定義BaseAdapter類中自定義Adapter中執行getView方法返回檢視為ViewHolder中的tag指定唯一標識值
@Override
public View getView(int position, ViewconvertView, ViewGroup parent) {
columnView.tag = period(雜誌id);
return convertView;
}
在更新GridView時,獲取GridView上顯示的複用檢視,判斷更新的雜誌period是否與上邊為ViewHolder設定tag值一樣,若是同一本雜誌的id,則更新ViewHolder中快取的檢視
/**
* 更新某一條內容
* @param period //雜誌id
* @param periodName //雜誌名稱
*/
publicvoid updateMagazineItem(String period, String periodName){
//獲取GridView複用的檢視
for(inti=0; i<mGridView.getChildCount(); i++){
//判斷View上快取設定的ViewHolder的tag是否和需要更新的雜誌id一樣
if(((ViewHolder)mGridView.getChildAt(i).getTag()).tag.equals(period)){
//更新需要更新的View
if(Constants.downloadingmagazines.get(period)!= null){
((ViewHolder)mGridView.getChildAt(i).getTag()).columnName.setText(R.string.downloading);
}else{
((ViewHolder)mGridView.getChildAt(i).getTag()).columnName.setText(periodName);
}
}
}
}
在檢視上只需要更新GridView中的幾條顯示的內容View,所以通過迴圈判斷也不會太耗時,直接在UI執行緒處理即可