为ListView中每一项里的ImageButton设置监听

之前做过有关类似ListView的例子都是关于响应点击ListView中某一项的实现(用listView.setOnItemClickListener()),这次遇到一个问题是ListView的Item布局为一个混合布局,里面包含ImageButton,在想要为其添加按钮的时候无论如何都找不到对应的Id为其设置。

后来,经过别人指点说是不能直接用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图片按钮");

                            }

         });    
   }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值