复杂的ListView的实现:
/**
* ListView的适配器
*/
private class AppManagerAdapter extends BaseAdapter{
@Override
public int getCount() {
return userAppInfos.size()+1+systemAppInfos.size()+1;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
AppInfo appInfo;
if(position == 0){ //显示用户程序有多少个的小标签
TextView tv = new TextView(getApplication());
tv.setTextColor(Color.WHITE);
tv.setBackgroundColor(Color.GRAY);
tv.setText("用户程序:"+userAppInfos.size()+"个");
return tv;
}else if(position == (userAppInfos.size()+1)){
TextView tv = new TextView(getApplicationContext());
tv.setTextColor(Color.WHITE);
tv.setBackgroundColor(Color.GRAY);
tv.setText("系统程序:"+systemAppInfos.size()+"个");
return tv;
}else if(position <= userAppInfos.size()){
int newPosition = position-1;
appInfo = userAppInfos.get(newPosition);
}else{
int newPosition = position-1-userAppInfos.size()-1;
appInfo = systemAppInfos.get(newPosition);
}
View view;
ViewHolder holder;
// 不仅需要检查是否为空,还要判断是否是合适的类型去复用
if(convertView != null && convertView instanceof RelativeLayout){
view = convertView;
holder = (ViewHolder) view.getTag();
}else{
view = View.inflate(getApplicationContext(),R.layout.list_item_appinfo,null);
holder = new ViewHolder();
holder.iv_icon = (ImageView) view.findViewById(R.id.iv_app_icon);
holder.tv_location = (TextView) view.findViewById(R.id.tv_app_location);
holder.tv_name = (TextView) view.findViewById(R.id.tv_app_name);
view.setTag(holder);
}
holder.iv_icon.setImageDrawable(appInfo.getIcon());
holder.tv_name.setText(appInfo.getName());
if(appInfo.isInRom()){
holder.tv_location.setText("手机内存");
}else{
holder.tv_location.setText("外部存储");
}
return view;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
}
static class ViewHolder {
TextView tv_name;
TextView tv_location;
ImageView iv_icon;
}