Load a new Activity , pass value to it in kotlin

How to start a new activity ? How to pass a value from an activity to the other ? Probably these questions have come to your mind if you have just started using Kotlin for developing android apps . By the end of this post you’ll have all the answers .

We shall use Kotlin-android-extensions to access the widgets here . In our example we’ll start ActivityB from MainActivity, we shall pass a message to ActivityB from MainActivity . Here is our MainActivity.kt

Let us closely look at the following statement
val intent = Intent(this, ActivityB::class.java)

Q: What is :: ?
:: operator is used to access member references or class references in Kotlin . The Intent() constructor requires an instance of Class type as the second parameter which we get with .class in java .

Q: If :: gets us the class reference , why the .java at the end ?
Because :: gives us the the Kotlin class reference which is an instance of KClass , but we need a java class reference (an instance of Class) . KClass has an extension property named java which returns the corresponding java Class instance , thus ActivityB::class.java gives us the java class reference for ActivityB .

Again , the following statement may not look any different from the way it is written in java .
intent.putExtra(ActivityB.KEY_MSG, msgToBeSent)

But there is something new . Though it looks like we are accessing a static constant KEY_MSG from ActivityB (i.e. ActivityB.KEY_MSG) , it is not true . Kotlin does not support static members , thus we are using companion objects which let us access the constants of a class with syntax similar to accessing static constant in java . Now lets have a look at our ActivityB.kt .

Well , we have seen how to use companion objects as an alternative to static constants . Now the following question may already have come to your mind , so lets find the answer –

Q. Is a member of a companion object same to a static member ?
No, the documentation says –
“Note that, even though the members of companion objects look like static members in other languages, at runtime those are still instance members of real objects”

I hope this post helps you in your initial steps into Kotlin . Happy coding .

Leave a Reply

Your email address will not be published. Required fields are marked *