Kotlin中的android活动静态启动方法
在java中,可以为活动定义启动程序静态方法。在Android Studio中,甚至有一个“初学者”模板:它看起来像这样:Kotlin中的android活动静态启动方法,android,kotlin,Android,Kotlin,在java中,可以为活动定义启动程序静态方法。在Android Studio中,甚至有一个“初学者”模板:它看起来像这样: public class MyActivity extends AppCompatActivity { private static final String EXTRA_FOO = "foo"; public static void start(Context caller, String bar){ Intent intent = n
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);
}
}
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)
}
}
}
我在科特林也有同样的想法,我想到的最接近的东西是这样的:
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);
}
}
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)
}
}
}
有没有更简洁、更优雅的方法?我不敢相信这是一条路,它看起来比Java更丑陋。此外,Kotlin没有“初学者”模板。您可以采取一些方法。我喜欢: 这将创建
上下文
的扩展,以便您可以在任何上下文
对象上调用startMyActivity
这是一个更类似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)
}
添加到山姆的方法中,我通常使用扩展来进行活动,但是在需要创建新实例和传递参数的片段中,我可以考虑以下内容:
class F : Fragment() {
companion object {
operator fun invoke(text: String): F {
val f = F()
val bundle = Bundle()
bundle.putString("key", text)
f.arguments = bundle
return f
}
fun test() {
//you can now initialize a fragment and put text in its bundle like so
val f = F("hi")
}
}
}
运算符函数允许您使用类似构造函数的表示法。谢谢,我喜欢这个解决方案。您是否也建议一些其他方法?但是您如何从调用方活动调用此方法?我尝试了你的第二个选项。@Sam你有什么建议来创建片段以避免伴随对象吗?@Sam仍然不能调用startMyActivity方法,因为extansion不会使它成为静态的。。。MyActivity仍然没有startMyActivity方法。