android自定义适配器的ListView的事件监听

jopen 9年前

  1. 自定义适配器的ListView的事件监听原理
  2. 案例需要实现的功能
  3. 功能实现步骤
  4. 说明

自定义适配器的ListView的事件监听原理

在自定义适配器类的getView方法中,我们可以得到每个item中的所有的控件对象。想对某个控件进行点击监听,可以调用View对象的setOnClickListener方法,调用setOnClickListener方法,需要传递一个View.OnClickListener对象作为参数,事件触发时,View.OnClickListener对象的onClick方法会被调用,同时把被点击的控件对象作为参数传回onClick方法,我们在onClick方法中,调用被点击的控件的getId方法就知道是哪个控件被点击,为了知道是list中position为多少的控件被点击,我们可以可getView方法中调用需要监听的控件的setTag(position)方法,设置该控件的Tag为position,在onClick方法中我们调用被点击控件的getTag方法就可知道position为多少了。 最好,把事件响应的代码放在Activity中。

案例需要实现的功能

在ListView中,每一行有两个Button:itemButton1和itemButton2,对这两个按钮的点击事件进行监听,被点击时,用Toast显示该时itemButton1还是itemButton2被点击了,被点击的按钮是第几行。

android自定义适配器的ListView的事件监听

功能实现步骤

1.在MyListViewAdapter适配器中增加View.OnClickListener类型的成员变量cliker;

2.在getView方法中得到两个Button对象,并调用setTag方法把当前的position设置为tag,和setOnClickListener方法设置clicker对象为监听器对象

    Button itemButton1 = (Button) convertView.findViewById(R.id.itemButton1);      itemButton1.setTag(position);itemButton1.setOnClickListener(cliker);      Button itemButton2 =  (Button) convertView.findViewById(R.id.itemButton2);      itemButton2.setTag(position);      itemButton2.setOnClickListener(cliker);


3.Activity类实现View.OnClickListener接口,并重写onClick方法。把该Activity作为View.OnClickListener对象传递到MyListViewAdapter类中的clicker对象。在onClick中,通过v.getId()得到该控件的id,判断是itemButton1还是itemButton2,通过v.getTag()得到控件的tag,判断是第几个itemButton被点击了。

@Override  public void onClick(View v) {      // TODO Auto-generated method stub      switch (v.getId()) {      case R.id.itemButton1:      {          Toast.makeText(this, "position为"+v.getTag()+"的itemButton1被点击", Toast.LENGTH_SHORT).show();          break;      }      case R.id.itemButton2:      {          Toast.makeText(this, "position为"+v.getTag()+"的itemButton2被点击", Toast.LENGTH_SHORT).show();          break;      }      default:          break;      }  }


说明

ListView的使用和自定义适配器的使用请看http://www.yee4.com/blog/357.htmlhttp://www.yee4.com/blog/360.html

源代码下载 http://pan.baidu.com/s/1o6odcuA

来自