项目中遇到一个问题,点击按钮控制车辆时,需要先判断车机是否在线,但是以前没有考虑到这些情况,所以点击事件就是直接使用的View.setOnClickListener(),有很多个按钮都需要在执行点击事件具体逻辑前判断车机是否在线,如果在每个点击事件里面加if(···) else(···)就太麻烦了,幸好项目是用的Kotlin开发,可以使用扩展方法来实现。
- 扩展方法
/**
* 扩展方法:校验车机是否在线的点击事件,若在线才会执行具体逻辑,不在线则提示车机不在线
*/
fun View.setOnlineStatusClickListener(l: (View)->Unit){
this.setOnClickListener {
if (CarStatus.isOnline){
//执行点击事件
l.invoke(it)
}else{
ToastUtils.showShort(this.context.resources.getString(R.string.car_status_offline))
}
}
}
fun View.setOnlineStatusClickListener(l: View.OnClickListener){
this.setOnClickListener {
if (CarStatus.isOnline){
//执行点击事件
l.onClick(it)
}else{
ToastUtils.showShort(this.context.resources.getString(R.string.car_status_offline))
}
}
}
- 调用
//空调开关
//示例一:使用setOnlineStatusClickListener替换setOnClickListener()
aircondition_open_iv.setOnlineStatusClickListener {
if (CarStatus.isAirConditionerOpening) {
airConditionViewModel.controlAirConditioner(false)
} else {
airConditionViewModel.controlAirConditioner(true)
}
}
//示例二
class CarSearchRootFragment : BaseFragment(),View.OnClickListener{
(···)
//使用setOnlineStatusClickListener替换setOnClickListener()
car_search_root_send_btn_tv.setOnlineStatusClickListener(this)
(···)
}