您的位置:首页 > 移动开发 > Android开发

Android适配器之------BaseAdapter(例子)

2012-09-03 17:50 218 查看
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文件示例

 

 

<?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> 
 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息