新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > android viewHolder處理listView滑動

        android viewHolder處理listView滑動

        作者: 時間:2016-10-08 來源:網絡 收藏

        在沒有用viewHolder的情況下,listView表現效率低下。如果加載的數量過多則會一點點的消耗內存,直到拋出oom。開始異步加載圖片會出現圖片錯位的問題,后來查閱資料將holder里邊的圖片地址和圖片一一對應起來,在異步加載的回調函數中將其替換回來。

        本文引用地址:http://www.104case.com/article/201610/305655.htm

        holder.thumb_image.setTag(hotel.getHotelTitlePic()); //避免圖標錯位,在異步加載成功后替換回來

        ImageView imageView = (ImageView) listView.findViewWithTag(imageUrl);

        if(imageView != null){

        imageView.setImageDrawable(imageDrawable);

        imageView.setTag();

        }

        以上關鍵代碼解決圖片錯位問題。

        下面是getView()方法

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

        final MHotelInfo hotel = this.getItem(position);

        if (rowView == null) {

        holder = new ViewHolder();

        LayoutInflater inflater = ((Activity) this.getContext())

        .getLayoutInflater();

        rowView = inflater.inflate(R.layout.hotel_item_view, null);

        holder.typeName = (TextView) rowView.findViewById(R.id.hotelType);

        holder.thumb_image=(ImageView)rowView.findViewById(R.id.img);// 縮略圖

        holder.distance = (TextView) rowView.findViewById(R.id.distance);

        rowView.setTag(holder);

        }else{

        holder = (ViewHolder) rowView.getTag();

        }

        // 設置ListView的相關值

        holder.thumb_image.setTag(hotel.getHotelTitlePic()); //避免圖標錯位,在異步加載成功后替換回來

        holder.typeName.setText(hotel.getTypeName());

        if(null == hotel.getHotelTitlePic() || hotel.getHotelTitlePic().equals()){ //如果沒有圖標就顯示默認圖標

        holder.thumb_image.setImageResource(R.drawable.downloadfalse);

        }else{

        //異步加載圖片

        imageLoader.loadDrawable(hotel.getHotelTitlePic(), new ImageCallback() {

        public void imageLoaded(Drawable imageDrawable, String imageUrl) {

        ImageView imageView = (ImageView) listView.findViewWithTag(imageUrl);

        if(imageView != null){

        imageView.setImageDrawable(imageDrawable);

        imageView.setTag();

        }

        }

        });

        }

        return rowView;

        }

        static class ViewHolder {

        TextView typeName;

        ImageView thumb_image;

        }

        但是ViewHolder為什么是被設計成static類型的,本人一直沒弄清楚。在網上找了些資料但是一直沒能看到一個能說服我的理由。又說節省內存,保持對象的唯一性,還有說保持圖片不錯亂但是個人感覺都不怎么靠譜。今天我試了下將static去掉照常運行沒感覺和以前有什么區別。后來我查了下static類的一些特性,首先ViewHolder是一個內部類若是static類的話則不需要依賴外部類的對象。也就是說只有static的內部類的成員變量才可以被聲明成static類型,若內部類不是static類型的則不可以聲明靜態成員變量。不知道是不是static內部類的這個特性吸引了設計者?如果有誰清楚這個問題還請不吝賜教。



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 海淀区| 兴城市| 巴彦淖尔市| 色达县| 九寨沟县| 岳普湖县| 蒙阴县| 开远市| 伊通| 安图县| 建始县| 茶陵县| 南郑县| 韩城市| 日喀则市| 定西市| 吉首市| 南靖县| 马鞍山市| 和顺县| 乳源| 锦屏县| 依兰县| 台中市| 呼图壁县| 河源市| 绥宁县| 湘西| 固始县| 深泽县| 鹿邑县| 涞源县| 建宁县| 丹寨县| 二手房| 抚顺市| 温州市| 原阳县| 乳山市| 周口市| 华容县|