在Java中,可以为Activity定义一种入门静态方法。在Android Studio中,甚至还有一个“入门”模板:它看起来像这样:
public class MyActivity extends AppCompatActivity {
private static final String EXTRA_FOO = "foo";
public static void start(Context caller, String bar){
Intent intent = new Intent(caller, MyActivity.class);
intent.putExtra(EXTRA_FOO, bar);
caller.startActivity(intent);
}
}
Run Code Online (Sandbox Code Playgroud)
我用Kotlin围绕着这个相同的概念,我想到的最接近的东西是这样的:
class MyActivity : AppCompatActivity() {
companion object {
private val EXTRA_FOO = "foo"
fun start(caller: Context, bar: String){
val intent = Intent(caller, MyActivity::class.java)
intent.putExtra(EXTRA_FOO, bar)
caller.startActivity(intent)
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更简洁,优雅的方法可以做到这一点?我不敢相信这是要走的路,它看起来比Java中的丑陋。另外,没有Kotlin的“入门”模板。
您可以采取几种方法。我是扩展函数的粉丝:
class MyActivity : AppCompatActivity()
private fun Intent.extraFoo(bar : String) = putExtra("foo", bar)
fun Context.startMyActivity(bar : String) =
Intent(this, MyActivity::class.java).apply { extraFoo(bar) }.let(this::startActivity)
Run Code Online (Sandbox Code Playgroud)
这将创建一个扩展,Context以便您可以调用startMyActivity任何Context对象。
下面是类似 Java 风格的相同扩展函数,因此您可以更轻松地将其与已有的扩展函数进行比较:
private val EXTRA_FOO = "foo"
fun Context.startMyActivity(bar : String) {
val intent = Intent(this, MyActivity::class.java)
intent.putExtra(EXTRA_FOO, bar)
startActivity(intent)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1267 次 |
| 最近记录: |