android自定义适配器的ListView的事件监听
自定义适配器的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被点击了,被点击的按钮是第几行。
功能实现步骤
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.html和http://www.yee4.com/blog/360.html
来自