关于自定义listView中各种子控件定义点击事件与 主点击事件重复的解决办法

本文介绍了在自定义ListView中处理子控件点击事件的方法,通过在Adapter内定义回调接口,实现在外部处理按钮点击事件,同时记录点击位置,详细阐述了如何避免主点击事件与子控件点击事件冲突。

  1. 在Adapter里面定义一个接口叫CallBack,接口的抽象方法为click(View view)
  2. 然后在getView方法里面对button的点击事件进行注册,并重写onClick方法,方法体为mCallBack.click(view),也就是说点击Button按钮时就去调用CallBack的click方法
  3. 在getView里面给button setTag,Tag值为position,这样可以记录button所在的具体位置
  4. 在Adapter的抽象方法里面加上CallBack参数,这样当listView设置adapter时就必须new CallBack,然后重写click方法。

这样就利用接口回调实现了在Adapter之外对Button的按钮点击事件处理的功能了

这可能就是传说中的回调吧!!!

SelfRoomAdapter.java代码
package com.example.model;

import java.util.List;

import com.example.ddf.R;
import com.example.javabean.Food;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class SelfRoomFoodAdapter<T extends Food> extends BaseAdapter implements View.OnClickListener{

	private Context context;
	private List<T> list;

    private CallBack mCallBack;
	public SelfRoomFoodAdapter(Context context, List<T> list,CallBack callBack) {
		this.context = context;
		this.list = list;
		mCallBack=callBack;
	}

	 public interface CallBack{
	        public void clickd(View view);
	        public void clicke(View view);
	    }
	@Override
	public int getCount() {
		return list.size();
	}

	@Override
	public Object getItem(int position) {
		return list.get(position);
	}

	@Override
	public long getItemId(int position) {
		return 0;
	}
	 public void onClick(View v) {
		 ImageView im= (ImageView)v;
		 switch (im.getId()){
		 case R.id.btn_delete: mCallBack.clickd(v);
		 break;
		 case R.id.btn_edit:mCallBack.clicke(v);
		 break;
		 default:break;
		 }
	        
	        
	    }


	@Override
	public View getView(int position, View co
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值