public class DiaryAdapter extends BaseAdapter {
<span style="white-space:pre"> </span>int num = 0;
<span style="white-space:pre"> </span>private List<Map<String,Object>> coll;
<span style="white-space:pre"> </span>private LayoutInflater mInflater;
<span style="white-space:pre"> </span>private Context context;
<span style="white-space:pre"> </span>public DiaryAdapter(Context context, List<Map<String,Object>> coll) {
<span style="white-space:pre"> </span>this.coll = coll;
<span style="white-space:pre"> </span>mInflater = LayoutInflater.from(context);
<span style="white-space:pre"> </span>this.context = context;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>public int getCount() {
<span style="white-space:pre"> </span>// TODO Auto-generated method stub
<span style="white-space:pre"> </span>System.out.println(coll.size());
<span style="white-space:pre"> </span>return coll.size();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>public Object getItem(int arg0) {
<span style="white-space:pre"> </span>// TODO Auto-generated method stub
<span style="white-space:pre"> </span>System.out.println(coll.get(arg0));
<span style="white-space:pre"> </span>return coll.get(arg0);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>public long getItemId(int arg0) {
<span style="white-space:pre"> </span>// TODO Auto-generated method stub
<span style="white-space:pre"> </span>System.out.println(arg0);
<span style="white-space:pre"> </span>return arg0;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>public View getView(int arg0, View arg1, ViewGroup arg2) {
<span style="white-space:pre"> </span>// TODO Auto-generated method stub
<span style="white-space:pre"> </span>final Map<String,Object> te = coll.get(arg0);
<span style="white-space:pre"> </span>boolean isMonth = (Boolean) te.get("isMonth");
<span style="white-space:pre"> </span>ViewHolder viewHolder;
<span style="white-space:pre"> </span>System.out.println(arg0);
<span style="white-space:pre"> </span>System.out.println(arg1);
<span style="white-space:pre"> </span>if(arg1 == null)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>viewHolder = new ViewHolder();
<span style="white-space:pre"> </span>arg1 = mInflater.inflate(R.layout.diarylistvmonth, null);
<span style="white-space:pre"> </span>viewHolder.month = (TextView) arg1.findViewById(R.id.diarymonth);
<span style="white-space:pre"> </span>viewHolder.imal = (ImageView) arg1.findViewById(R.id.diaryimal);
<span style="white-space:pre"> </span>viewHolder.imar = (ImageView) arg1.findViewById(R.id.diaryimar);
<span style="white-space:pre"> </span>viewHolder.value = (TextView) arg1.findViewById(R.id.diaryvalue);
<span style="white-space:pre"> </span>viewHolder.diary_layout = (LinearLayout) arg1.findViewById(R.id.diary_layout);
<span style="white-space:pre"> </span>arg1.setTag(viewHolder);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>else
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>viewHolder = (ViewHolder) arg1.getTag();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>if(isMonth)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>viewHolder.month.setVisibility(0);
<span style="white-space:pre"> </span>viewHolder.month.setText((CharSequence) te.get("month"));
<span style="white-space:pre"> </span>viewHolder.diary_layout.setVisibility(8);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>else
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>viewHolder.diary_layout.setVisibility(0);
<span style="white-space:pre"> </span>viewHolder.month.setVisibility(8);
<span style="white-space:pre"> </span>viewHolder.value.setText((CharSequence) te.get("value"));
<span style="white-space:pre"> </span>viewHolder.imal.setBackgroundResource((Integer) te.get("imal"));
<span style="white-space:pre"> </span>viewHolder.imar.setBackgroundResource((Integer) te.get("imar"));
<span style="white-space:pre"> </span>arg1.setOnClickListener(new OnClickListener(){
<span style="white-space:pre"> </span>@Override
<span style="white-space:pre"> </span>public void onClick(View arg0) {
<span style="white-space:pre"> </span>// TODO Auto-generated method stub
<span style="white-space:pre"> </span>Intent intent = new Intent(context,DiaryDetailActivity.class);
<span style="white-space:pre"> </span>intent.putExtra("id", ((Integer)te.get("id")));
<span style="white-space:pre"> </span>context.startActivity(intent);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>});
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return arg1;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>class ViewHolder {
<span style="white-space:pre"> </span>public ImageView imal;
<span style="white-space:pre"> </span>public ImageView imar;
<span style="white-space:pre"> </span>public TextView value;
<span style="white-space:pre"> </span>public TextView month;
<span style="white-space:pre"> </span>public LinearLayout diary_layout;
<span style="white-space:pre"> </span>public boolean isMonth = true;
<span style="white-space:pre"> </span>}
}
基本流程:
1、继承BaseAdapter类
2、自动重写基本的函数getcout,getitem,getitemid
3、写构造函数,传入context和数据
4、定义一个类,包括需要使用到的控件,用来存放控件信息
5、重写getview,判断该view是否为空,为空则新建一个自定义类,绑定控件后与该view绑定,否则直接获取该view,随后将数据放入即可。
需要特别注意的是,每一个子view必须加载所有的控件,如果个listview的子view情况不同,可以通过setvisibility来处理
外部调用:
List<Map<String , Object>> listItems;
Map<String,Object> temp = new HashMap<String,Object>();
temp.put("isMonth", false);
temp.put("imal", R.drawable.diary_bq1_blue);
temp.put("value", "1234567.......");
temp.put("imar", R.drawable.diary_bq2_pink);
listItems.add(temp);
list = (ListView) findViewById(R.id.diarylistview);
DiaryAdapter diaryAdapter = new DiaryAdapter(this,listItems);
list.setAdapter(diaryAdapter); <span style="white-space:pre"> </span>
构建一个list后将数据放入,创建一个自定义的adapter,通过构造函数导入context和数据,再调用list.setAdapter