文章分类:移动开发
BaseAdapter
 
Java代码 
public class RecentAdapter extends BaseAdapter { 
 
    private class RecentViewHolder { 
        TextView appName; 
        ImageView appIcon; 
        TextView appSize; 
    } 
 
    private List<ResolveInfo> mAppList; 
    private LayoutInflater mInflater; 
    private PackageManager pm; 
 
    public RecentAdapter(Context c, List<ResolveInfo> appList, 
            PackageManager pm) { 
        mAppList = appList; 
        this.pm = pm; 
        mInflater = (LayoutInflater) c 
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 
     
    public void clear(){ 
        if(mAppList!=null){ 
            mAppList.clear(); 
        } 
    } 
 
    public int getCount() { 
        return mAppList.size(); 
    } 
 
    @Override 
    public Object getItem(int position) { 
        return mAppList.get(position); 
    } 
 
    @Override 
    public long getItemId(int position) { 
        // TODO Auto-generated method stub 
        return position; 
    } 
 
    public View getView(int position, View convertView, ViewGroup parent) { 
        RecentViewHolder holder; 
        if (convertView == null) { 
            convertView = mInflater.inflate(R.layout.app_info_item, null); 
            holder = new RecentViewHolder(); 
            holder.appName = (TextView) convertView.findViewById(R.id.app_name); 
            holder.appIcon = (ImageView) convertView 
                    .findViewById(R.id.app_icon); 
            holder.appSize = (TextView) convertView.findViewById(R.id.app_size); 
            convertView.setTag(holder); 
        } else { 
            holder = (RecentViewHolder) convertView.getTag(); 
        } 
        ResolveInfo appInfo = mAppList.get(position); 
        if (appInfo != null) { 
            String labelName = appInfo.loadLabel(pm).toString(); 
            if (labelName != null) { 
                holder.appName.setText(labelName); 
            } 
 
            Drawable icon = appInfo.loadIcon(pm); 
            if (icon != null) { 
                holder.appIcon.setImageDrawable(icon); 
            } 
        } 
        return convertView; 
    } 
     
    public void remove(int position){ 
        mAppList.remove(position); 
        this.notifyDataSetChanged(); 
    } 
 

 
其中两个注意点为:
setTag 用View设置存储数据
notifyDataSetChanged() 告诉View数据更改并刷新
View convertView = mInflater.inflate(R.layout.app_info_item, null)  加载XML Item 示图
 
app_info_item.xml文件示例
 
Java代码 
<?xml version="1.0" encoding="utf-8"?> 
 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android
    android:layout_width="fill_parent" android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical" android:minHeight="?android:attr/listPreferredItemHeight"> 
 
    <ImageView android:id="@+id/app_icon" android:layout_width="@android:dimen/app_icon_size" 
        android:layout_height="@android:dimen/app_icon_size" 
        android:layout_alignParentLeft="true" android:paddingLeft="6dip" 
        android:paddingTop="6dip" android:paddingBottom="6dip" 
        android:scaleType="fitCenter" /> 
 
    <TextView android:id="@+id/app_name" android:layout_width="wrap_content" 
        android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" 
        android:textColor="?android:attr/textColorPrimary" 
        android:layout_toRightOf="@id/app_icon" android:paddingLeft="6dip" 
        android:paddingTop="6dip" /> 
 
    <TextView android:id="@+id/app_description" 
        android:layout_width="wrap_content" android:layout_height="wrap_content" 
        android:textAppearance="?android:attr/textAppearanceSmall" 
        android:layout_below="@+id/app_name" android:layout_toRightOf="@id/app_icon" 
        android:paddingLeft="6dip" android:paddingBottom="6dip" /> 
    <TextView android:id="@+id/app_size" android:layout_width="wrap_content" 
        android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" 
        android:layout_alignParentRight="true" android:layout_below="@+id/app_name" 
        android:paddingRight="6dip" android:maxLines="1" /> 
 
</RelativeLayout>