后来,经过别人指点说是不能直接用SimpleAdapter来填充数据,需要继承BaseAdapter自定义一个Adapter,在其getView()中注册ImageButton的id,再设置监听。
具体实现代码如下:
list_item布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/biaotibg"
android:id="@+id/relative">
<ImageButton
android:layout_width="70dip"
android:layout_height="100dip"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_marginRight="10dip"
android:id="@+id/iamgeid">
</ImageButton>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="100dip"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/iamgeid"
android:id="@+id/linear">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textColor="#000000"
android:id="@+id/name"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id="@+id/linearTwo">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textColor="#000000"
android:text="@string/count"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textColor="#000000"
android:id="@+id/count"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id="@+id/linearThree">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textColor="#000000"
android:text="@string/updatetime"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textColor="#000000"
android:id="@+id/updatetime"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="bottom"
android:id="@+id/linearFour">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/pinglun"
android:id="@+id/comment"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/fenxiang"
android:id="@+id/share"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/shoucang"
android:id="@+id/collection"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/xiangqing"
android:id="@+id/detail"/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
要为里面的detail设置监听:
填充ListView的adapter代码如下:
private static String TAG = "MainActivity";
ListView listView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
//定义全屏参数
int flag = WindowManager.LayoutParams.FLAG_FULLSCREEN;
//获得窗口对象
Window window = this.getWindow();
window.setFlags(flag, flag);
setContentView(R.layout.anim_homepage);
listView = (ListView)findViewById(R.id.anim_lv);
List<Map<String,Object>> listData = new ArrayList<Map<String,Object>>();
Map<String,Object> map = new HashMap<String,Object>();
map.put("imageid", R.drawable.kenan);
map.put("name", "名侦探柯南");
map.put("count", "345");
map.put("updatetime", "2011-7-6");
listData.add(map);
listView.setAdapter(new mySimpleAdapter(this, listData, R.layout.list_item,
new String[]{"imageid","name","count","updatetime"},
new int[]{R.id.iamgeid,R.id.name,R.id.count,R.id.updatetime}));
}
//自定义一个mySimpleAdapter类,参数与SimpleAdapter完全相同。
class mySimpleAdapter extends BaseAdapter{
private LayoutInflater mInflater;
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() {
return list.size();
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
convertView = mInflater.inflate(layoutID, null);
for(int i=0;i<flag.length;i++){
if(convertView.findViewById(itemIDs[i]) instanceof ImageButton){//如果是ImageButton,为其设置图片
ImageButton ib = (ImageButton) convertView.findViewById(itemIDs[i]);
ib.setImageResource((Integer)list.get(position).get(flag[i]));
}
else if(convertView.findViewById(itemIDs[i]) instanceof TextView){//如果是TextView,为其填充文字
TextView tv = (TextView)convertView.findViewById(itemIDs[i]);
tv.setText((String)list.get(position).get(flag[i]));
}
}
addListener(convertView);//添加监听事件
return convertView;
}
public void addListener(View convertView) { //实现OnClick()方法
detail = (ImageButton)convertView.findViewById(R.id.detail);
detail.setOnClickListener(new OnClickListener(){
public void onClick(View v){
Log.i(TAG,"点击了ListView的detail图片按钮");
}
});
}