public class MainActivity extends Activity {
private ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
MyAdapter adapter = new MyAdapter();
adapter.addSecondItem("无线和网络");
adapter.addNormalItem("无线", R.drawable.ic_launcher);
adapter.addNormalItem("网络", R.drawable.ic_launcher);
adapter.addSecondItem("设备");
adapter.addNormalItem("声音", R.drawable.ic_launcher);
adapter.addNormalItem("存储", R.drawable.ic_launcher);
adapter.addNormalItem("haha", R.drawable.ic_launcher);
lv.setAdapter(adapter);
}
class MyAdapter extends BaseAdapter{
private List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
private Set<Integer> set = new TreeSet<Integer>();
private final int NORMAL_TYPE = 0;
private final int SECOND_TYPE = 1;
public void addNormalItem(String content,int imgId){
Map<String, Object> map = new TreeMap<String, Object>();
map.put("title", content);
map.put("logo", imgId);
list.add(map);
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
int type = set.contains(position)?SECOND_TYPE:NORMAL_TYPE;
return type;
}
public void addSecondItem(String content){
Map<String, Object> map = new TreeMap<String, Object>();
map.put("title", content);
map.put("logo", R.drawable.ic_launcher);
list.add(map);
set.add(list.size()-1);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vHolder = null;
if(convertView==null){
vHolder = new ViewHolder();
int type = getItemViewType(position);
switch (type) {
case NORMAL_TYPE:
convertView = getLayoutInflater().inflate(R.layout.normal_item, null);
vHolder.iv_logo = (ImageView) convertView.findViewById(R.id.iv_normal);
vHolder.tv_title = (TextView) convertView.findViewById(R.id.tv_normal);
break;
case SECOND_TYPE:
convertView = getLayoutInflater().inflate(R.layout.second_item, null);
vHolder.tv_title = (TextView) convertView.findViewById(R.id.tv_second);
break;
}
convertView.setTag(vHolder);
}else{
vHolder = (ViewHolder) convertView.getTag();
}
Map<String, Object> map = list.get(position);
vHolder.tv_title.setText(map.get("title").toString());
if(!set.contains(position)){
vHolder.iv_logo.setImageResource(Integer.parseInt(map.get("logo").toString()));
}
return convertView;
}
}
class ViewHolder{
TextView tv_title;
ImageView iv_logo;
}
}