我犯的错就是把simpeAdapter和baseAdaper看成一样的
首先要实现对这个控件的监控 可以写一个类继承baseAdaper,可以用一个通用的例子实现
package com.xiaoqiu.phonebeta; import java.util.List; import java.util.Map; import android.app.AlertDialog; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import android.widget.CompoundButton.OnCheckedChangeListener; public class MySimpleAdapter extends BaseAdapter { private LayoutInflater mInflater; public ProgressBar pb; public ImageView iv; Bitmap bitmap; private List<Map<String, Object>> list; private int layoutID; private String flag[]; private int ItemIDs[]; public MySimpleAdapter(Context context, List<Map<String, Object>> list, int layoutID, String flag[], int ItemIDs[]) { this.mInflater = LayoutInflater.from(context); this.list = list; this.layoutID = layoutID; this.flag = flag; this.ItemIDs = ItemIDs; } public int getCount() { // TODO Auto-generated method stub return list.size(); } public Object getItem(int arg0) { // TODO Auto-generated method stub return list.get(arg0); } public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } public View getView(int position, View convertView, ViewGroup parent) { convertView = mInflater.inflate(layoutID, null); for (int i = 0; i < flag.length; i++) {//备注1 if (convertView.findViewById(ItemIDs[i]) instanceof ImageView) { ImageView iv = (ImageView) convertView.findViewById(ItemIDs[i]); iv.setBackgroundResource((Integer) list.get(position).get( flag[i])); } else if (convertView.findViewById(ItemIDs[i]) instanceof TextView) { TextView tv = (TextView) convertView.findViewById(ItemIDs[i]); tv.setText((String) list.get(position).get(flag[i])); }else { } } System.out.println("--------->"+ItemIDs); addListener(convertView,position); return convertView; } /** * * 备注3 */ public void addListener(View convertView,int arg) { final int arg2=arg; ((ImageView)convertView.findViewById(R.id.call)).setOnClickListener( new View.OnClickListener() { public void onClick(View v) { // 自己要实现的地方 System.out.println("........"); } }); } }
注意在主Activity中调用的时候
ph_lv.setOnItemClickListener(new OnItemClickListener(){
@SuppressWarnings("rawtypes")
public void onItemClick(AdapterView<?> parent, View view, int id,
long arg3) {
HashMap item = (HashMap)parent.getItemAtPosition(id);
Intent intent = new Intent(Main.this,Userdisplay.class);
User user = new User();
user._id = Integer.parseInt(String.valueOf(item.get("_id")));
user.name = String.valueOf(item.get("name"));
user.number = String.valueOf(item.get("number"));
user.qq = String.valueOf(item.get("qq"));
user.email = String.valueOf(item.get("email"));
Bundle bundle = new Bundle();
bundle.putSerializable("user", user);
intent.putExtras(bundle);
startActivity(intent);
finish(); // pass object
// intent.put("_id", _id);
//startActivity(intent);
System.out.println("error----->"+user._id);
}
});
要使用 HashMap item = (HashMap)parent.getItemAtPosition(id);
必须在前面构造的通用baseAdapter类中的
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return list.get(arg0);
}
把返回值写成list.get(arg0)这样才返回的是对象 不然的话返回默认值0 那么就会出现类型转换错误