Android 通用监听器的封装

前言

在Android中,我们往往会在自定义dialog中进行一些点击事件的监听,而我们大多数是采用设置一个监听接口的方式,将点击事件回调给外部的Activity中进行处理。然而如果我们有多个Dialog,那么每个Dialog我们是不是都需要定义一个监听器接口来处理相关事件的监听,这样的话会导致监听接口后期的维护成本较高,因此封装一个足够通用的监听器是可以有效提高开发效率的。

常规方法

正常我们在Dialog中实现对某个点击事件的监听,应该类似如下代码

public interface OnClickListener{
	void onClick();
}

private OnClickListener onClickListener;

public void setOnClickListener(OnClickListener listener){
	onClickListener = listener;
}

在控件的点击事件下添加

if(null != onClickListener){
	onClickListener.onClick();
}

最后在外部Activity中给dialog设置监听器便可以实现。

mDialog.setOnClickListener(new OnClickListener(){
	@Override
	public void onClick(){
		//此处处理点击事件
	}
});

然而,这样做的话我们如果在点击事件中要添加参数,例如加多一个String的参数,那么我们便需要将onClick()改为onClick(String str),这样的话其实对后期维护的话不太方便,特别是代码量大的情况。另外每一个Dialog定义一个监听接口,这样改起来也会很麻烦,最好的方法就是封装一个足够通用的监听器,这样的话能大大提高我们的开发效率。

通用封装

我们可以在接口的抽象方法中增加几个参数,添加后如下

public interface OnClickListener{
	void onClick(int type, String msg, DataEntity entity);
}

下面我来说一下这几个参数代表的含义:type代表的是事件类型,因为每一个控件点击时触发的是不同的事件,那么我们可以将每一个事件都用一个类型来表示;msg这个参数只是单纯作为一个标记,使自己知道这个点击事件的具体作用;而entity代表保存的数据,我们可以将数据以hashmap的形式保存到entity中。

DataEntity这个类可以这样写:

public class DataEntity{
	privatet final private Map<String,String> mapStr = new LinkedHashMap<>();
	
	public String get(String key){
		return mapStr.get(key);
	}
	
	public void putStr(String key,String value){
		mapStr.put(key,value);
	}
}

大概是这个样子,具体还是得自己想想怎么写比较好,这里只是供大家作一个参考。

这样的话方法的调用可以这样写:

if(null != onClickListener){
	DataEntity entity = new DataEntity();
	entity.put("key","value");
	int type = 0;
	onClickListener.onClick(type,"点击事件",entity);//type可以在一个枚举类中定义一系列点击事件的类型
}

在外部的处理是这样的:

mDialog.setOnClickListener(new OnClickListener(){
	@Override
	public void onClick(int type,String msg,DataEntity entity){
		//此处处理点击事件
		if(type == 0){
			String value = entity.get("key");	
		}else{
		
		}
	}
});

这样的话我们如果需要增加或者删减参数只需要对entity进行修改,并不需要改到监听器的方法,可以使维护难度大大降低。

总结

以上就是Android中通用监听器封装的一个思路,这也是我最近刚学到的方法,觉得特别有用,所以想跟大家一起分享,具体的实现大家可以自己想想怎么封装会更好,更有利于开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值