Kotlin中的android活动静态启动方法

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

在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 = 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方法。