情景再现
背景
工作中每个人都要负责自己的那一块任务,有时候我们前一个工作如果没处理好,后续他人如果接手就容易出现看不懂你写的东西而来询问你的情况。
就如启动Activity,由于这个Activity是别人负责写的,我就会感到很迷茫,因为我不知道需要传递哪些必要的参数进去才能正确启动该Activity。
正常情形
比如OtherActivity需要两个非常重要的参数,知道的情况下就很容易写出启动代码:
val intent = Intent(this, OtherActivity::class.java) intent.putExtra("oneParam", "data1") intent.putExtra("twoParam", "data2") startActivity(intent)
通过Intent构建出当前“意图”(借助Intent传递两个必须的参数),然后调startActivity()或startActivityForResult()方法即可将Activity启动。
问题浮现
可是事情往往不会这样发展,这个要不是你自己开发的Activity,那你要么得仔细去阅读一遍该Activity代码,要么直接去询问那位写这个Activity的同事,你询问别人着实挺方便,但别人要问你,那可就麻烦了,因为你写过的可不会是一个两个Activity,大多数情况最后你自己都不太清楚了,如果你自己再去回顾一遍,很可能就会耽误你手上的工作了,所以我们如何去避免这种情况呢?下面就来谈谈怎么才能拒绝被打扰,让我们优雅的写出Activity启动方法吧。
解决方案
该问题的核心就是你写过的Activity别人无法快速知晓要传递多少参数?所以最佳写法当然是直接明确告诉他/她喽。如下,我们在自己负责的Activity中直接写上启动方法:
class OtherActivity : BaseActivity() { ... companion object { fun actionStart(context: Context, data1: String, data2: String) { val intent = Intent(context, OtherActivity::class.java) intent.putExtra("oneParam", data1) intent.putExtra("twoParam", data2) context.startActivity(intent) } } }
其中companion object是Kotlin规定的只要定义在这里面的方法都可以使用类似于Java静态方法的形式调用,而我们在上述代码中写了actionStart()方法,里面是我们完整的调用OtherActivity方法,而这样写后,别人不需要阅读你的代码也不用问你,就可以知道,该Activity应该需要传递哪些参数如何正确启动,当然,调用方法是很简单的:
button1.setOnClickListener { OtherActivity.actionStart(this, "data1", "data2") }
只需要调用方法这一句就可以轻松启动该Activity,再也不会因为这点小事而麻烦你了!
结语
尽管这是非常基础的,但因为很多人都不会想起来去做,所以麻烦就会越来越多,故精益求精实乃必要。