In java, one can define a starter static method for an Activity. In Android Studio, there is even a "starter" template for it: it would look something like this:
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);
}
}
I'm wrapping my head around this same concept in Kotlin and the closest thing I came up with looks like this:
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)
}
}
}
Is there a more concise and elegant way to do this? I can't believe this is the way to go, it looks uglier than in Java. Also, there is no "starter" template for Kotlin.
There are a few approaches you could take. I'm a fan of extension functions:
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)
This creates an extension to Context
so that you can call startMyActivity
on any Context
object.
Here's that same extension function in a more Java-like style, so you can compare it more easily to what you already have:
private val EXTRA_FOO = "foo"
fun Context.startMyActivity(bar : String) {
val intent = Intent(this, MyActivity::class.java)
intent.putExtra(EXTRA_FOO, bar)
startActivity(intent)
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With