Activity 跳转最佳实现方案
启动 Activity 的最佳方式
启动 Activity 的方法相信大家已经很熟悉了,首先通过Intent 构建当前的 “意图” ,然后调用startActivity() 或startActivityForResult() 方法将Activity 启动起来,如果有数据需要在Activity 之间传递则需要借助Intent 来完成。
假设SecondActivity 中需要用到两个非常重要的字符串参数,在启动SecondActivity 的时候必须传递过来 ,那么我们很容易写出以下代码:
val intent=Intent(this,SecondActivity::class.java)
intent.putExtra("param1","data1")
intent.putExtra("param2","data2")
startActivity(intent)
虽然这样写完全正确的,但是真正开发的项目中经常遇到这个问题。比如: SecondActivity 并不是由你开发的,但是现在你负责开发的部分需要启动SecondActivity ,而你不清楚启动SecondActivity 需要哪些数据。这时无非就两个办法:一个你自己阅读SecondActivity 中的代码,另一个就是去问候编写SecondActivity 的同事。这样做确实很麻烦,这时换一种写法,就可以打破这窘境:
修改 SecondActivity 中的代码-Kotlin:
class SecondActivity:AppCompatActivity() {
......
companion object {
fun actionStartActivity(context:Context,title:data1,content:data2){
val intent=Intent(context,SecondActivity::class.java).apply {
putExtra("param1",data1)
putExtra("param2",data2)
}
context.startActivity(intent)
}
}
}
修改 SecondActivity 中的代码-Java:
public class SecondActivity extends NewsContentActivity {
.......
public static void actionStartActivity(Context context,String data1,String data2){
Intent intent=new Intent(context,SecondActivity.class);
intent.putExtra("param1",data1);
intent.putExtra("param2",data2);
context.startActivity(intent);
}
}
在这里我们使用了一个新的语法结构companion object ,并在companion object 中定义了一个actionStartActivity 的方法。之所以要这样写是因为kotlin 有规定,所有定义在companion object 中的方法都可以使用类似Java 静态方法形式调用。
那么,这么写有什么好处呢?
最重要的一幕了然,NewsContentActivity 所需要的重要数据在方法参数中全部体现出来了,这样既使不用阅读NewsContentActivity 中的代码,也不用去问候编写NewsContentActivity 的同事,你就可以很清晰的知道启动NewsContentActivity 需要哪些数据。并且还简化了启动Activity 的代码:
kotlin:
button.setOnClickListener {
SecondActivity.actionStartActivity(this,"data1","data2")
}
Java:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SecondActivity.actionStartActivity(this,"data1","data2")
}
});
养成一个好习惯,给你编写的每一个Activity 都加上类似的启动方法把,这样不仅可以让启动Activity 变得更加的简单-简便,也可以节省不少你同事来问候你的时间。
|