1. 程式人生 > >實現動態修改ListView中某個Item裡的元件值

實現動態修改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執行緒處理即可