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