/*
 * Copyright (C) 2008 Esmertec AG.
 * Copyright (C) 2008 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.mms.ui;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.android.mms.R;

/**
 * An adapter to store icons.
 */
public class IconListAdapter extends ArrayAdapter<IconListAdapter.IconListItem> {
    protected LayoutInflater mInflater;
    private static final int mResource = R.layout.icon_list_item;

    public IconListAdapter(Context context,
            List<IconListItem> items) {
        super(context, mResource, items);
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView text;
        ImageView image;

        View view;
        if (convertView == null) {
            view = mInflater.inflate(mResource, parent, false);
        } else {
            view = convertView;
        }

        // Set text field
        text = (TextView) view.findViewById(R.id.text1);
        text.setText(getItem(position).getTitle());

        // Set resource icon
        image = (ImageView) view.findViewById(R.id.icon);
        image.setImageResource(getItem(position).getResource());

        return view;
    }

    public static class IconListItem {
        private final String mTitle;
        private final int mResource;

        public IconListItem(String title, int resource) {
            mResource = resource;
            mTitle = title;
        }

        public String getTitle() {
            return mTitle;
        }

        public int getResource() {
            return mResource;
        }
    }
}

@@ -1182,16 +1182,679 @@
 t_item;%0A
+    private ViewHolder mViewHolder;%0A%0A    static class ViewHolder %7B%0A        private View mView;%0A        private TextView mTextView;%0A        private ImageView mImageView;%0A%0A        public ViewHolder(View view) %7B%0A            mView = view;%0A        %7D%0A%0A        public TextView getTextView() %7B%0A            if (mTextView == null) %7B%0A                mTextView = (TextView) mView.findViewById(R.id.text1);%0A            %7D%0A%0A            return mTextView;%0A        %7D%0A%0A        public ImageView getImageView() %7B%0A            if (mImageView == null) %7B%0A                mImageView = (ImageView) mView.findViewById(R.id.icon);%0A            %7D%0A%0A            return mImageView;%0A        %7D%0A    %7D
 %0A    pub
@@ -2169,57 +2169,8 @@
 ) %7B%0A
-        TextView text;%0A        ImageView image;%0A%0A
     
@@ -2295,140 +2295,274 @@
     
-%7D else %7B%0A            view = convertView;%0A        %7D%0A%0A        // Set text field%0A        text = (TextView) view.findViewById(R.id.text1
+    mViewHolder = new ViewHolder(view);%0A            view.setTag(mViewHolder);%0A        %7D else %7B%0A            view = convertView;%0A            mViewHolder = (ViewHolder) view.getTag();%0A        %7D%0A%0A        // Set text field%0A        TextView text = mViewHolder.getTextView(
 );%0A 
@@ -2654,55 +2654,51 @@
     
-image = (ImageView) view.findViewById(R.id.icon
+ImageView image = mViewHolder.getImageView(
 );%0A 

Enhance performance by using ViewHolder