简单控件实用 接口调用

Kotlin 实现Activity之间的跳转
获取id(可省略,直接使用id) private var b1: Button? = null //先声明 b1 = findViewById(R.id.one) as Button //在获取

val intent=Intent(this@MainActivity,Main2Activity::class.java)startActivity(intent)

跳转传值b1 { v -> //第一种方式 startActivity( “require_time” to DateUtil.nowDate, “require_content” to et_require.text.toString() ) //第二种方式 startActivity( Pair(“require_time”, DateUtil.nowDate), Pair(“require_content”, et_require.text.toString()) ) }

接收类SecondActivity.kt //请求参数的包裹val bundle = intent.extrasval require_time = bundle.getString(“require_time”)val require_content = bundle.getString(“require_content”)text_response.text = “收到消息:\n时间:$require_time \n信息: $require_content”

接口调用
1.声明接口CallBack 和调用类Workerinterface CallBack { fun onSuccess(str: String) fun onFailure(code: Int)}class Worker { var callback: CallBack? = null fun done(str: String) { callback?.onSuccess(str) }
fun fail(code: Int) { callback?.onFailure(code) }
fun setCallBack(lis: CallBack) { callback = lis; }}
2.直接调用接口,使用了object关键字 ,此时假设不关心success方法,但必须显示声明。 Worker().apply { setCallBack(object : CallBack { override fun onSuccess(str: String) { } override fun onFailure(code: Int) { toast("$code") } }) }.fail(110)//结果:吐司:110
3.Java风格简化调用,声明简化类SimCallBackpublic class SimCallBack implements CallBack{ @Override public void onSuccess(@NotNull String str) { } @Override public void onFailure(int code) { }}

4.Java风格简化调用的展示,不关心的onSuccess不用再显示声明Worker().apply { setCallBack(object : SimCallBack() { override fun onFailure(code: Int) { super.onFailure(code) toast("$code") } })}.fail(110)
上述带着浓浓java味道的调用,不仅代码风格比较混杂,而且代码显得冗余。重点来了,Kotlin怎么去克服上面两点呢。看例子。1.还是CallBack接口,不过其简化类需要用Kotlin风格来做:class SimpleCallBack : CallBack{ private var _OnSucess: ((str: String) -> Unit)? = null fun success(listener: (str: String) -> Unit) { _OnSucess = listener } override fun onSuccess(str: String) { _OnSucess?.invoke(str) } private var _OnFailure: ((code: Int) -> Unit)? = null override fun onFailure(code: Int) { _OnFailure?.invoke(code) } fun fail(listener: (code: Int) -> Unit) { _OnFailure = listener }}
2.调用类Worker 也是要进行处理一下的,代码基本同原来的那些,只是增加了以下方法。注意,若不是为了兼容java方式,原setCallBack可以不再声明,直接赋值就好,由此,新增方法可以看做是原setCallBack方法的替换。 fun setCallBacker(listener: SimpleCallBack.() -> Unit) { var ca = SimpleCallBack() ca.listener() setCallBack(ca) }
3.最后看看调用方式吧: Worker().apply { setCallBacker { success { toast(it) } fail { }//若不需要,可以不显示声明 } }.done(“完成”)//结果:吐司:完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值