问题思考
在实际工作场景中,大家各个模块都是有交互的,那么就存在各个模块Activity的相互跳转。假设小A负责一个ActivityA,所有跳转到ActivityA的请求都需要携带String类型的参数resaon,那么每一个对接跳转到ActivityA的业务,小A都要说一遍:“跳转过来需要带一个参数reason”,很明显这种工作效率是很低的。而且更为麻烦的是,如果小A这里的业务变了,除了reason参数还需要额外传递一个packageName参数,那么怎么更简单有效的告知所有跳转过来的用户呢?
解决方案
ActivityA中定义一个跳转到自身的公共方法。
代码实现
假设现在有一个核心Activity:MainActivity.kt
class MainActivity : AppCompatActivity() { companion object { //@JvmStatic fun startSecondActivity (context: Context, reason: String, packageName: String) {
var intent = Intent(context, MainActivity::class.java) intent.putExtra("reason", reason) intent.putExtra("packageName", packageName) context.startActivity(intent) } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val param1 = intent.getStringExtra("reason") val param2 = intent.getStringExtra("packageName") Log.d("MainActivity", "reason: $param1 packageName: $param2") } }
现在有一个UserActivity要跳转到MainActivity
class UserActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val btn = findViewById<Button>(R.id.btn) btn.setOnClickListener { SecondActivity.startSecondActivity(this, "pass", "com.security.user") } }
}
可以看到我们在MainActivity通过companion object定义了一个"静态方法",任何要跳转到MainActivity的Activity,只需要调用startSecondActivity方法即可,按照方法定义要求传入对应的参数,即可实现Activity跳转规则的标准化。
注意事项
需要注意的是:如果你的UserActivity不是kotlin类,而是java类,那么你就不能直接用类名调用方法:SecondActivity.startSecondActivity。因为Kotlin知道companion object中的函数,因此可以直接在类上调用它,而Java对此一无所知。解决方法是在方法上使用@JvmStatic注解,这样Java类中的代码就可以识别该方法为"静态方法"。
标签:packageName,Activity,MainActivity,reason,intent,跳转,Android,写法 From: https://www.cnblogs.com/shibin90/p/17480837.html