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>
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>
相关文章推荐
- Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法
- Android学习第五天————ExpandableListView组件通过适配器BaseExpandableListAdapter实现两层列表项
- Android适配器之-----BaseAdapter(帮助文档)
- android中的万能适配器BaseAdapter的总结
- Android 针对继承BaseAdapter的自定义适配器应注意的几个地方
- android listview继承BaseAdapter,自定义的适配器,getView方法执行多组循环解决方式
- Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段
- android-继承BaseAdapter自定义适配器基础
- android之通过BaseAdapter自定义适配器的使用
- 【Android】以BaseAdapter做适配器的ListView及其性能优化
- android的listview+BaseAdapter的例子
- android 适配器Adpter的使用总结 之 BaseExpandableListAdapter
- Android适配器之BaseAdapter
- android 自定义适配器BaseAdapter
- 【转】 android-继承BaseAdapter--自定义适配器,getView执行多次的解决方法
- Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段
- Android ListView适配器BaseAdapter中getItemViewType需要注意的问题
- Android新浪微博开发(三)主UI的实现:用BaseAdapter做适配器的LsitView
- Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段
- Android数据适配器BaseAdapter