I have the following bit of code in my HomeActivity
to use LiveData
.
override fun onCreate(savedInstanceState: Bundle?) {
sup
To omit the Observer { ... }
part just add import androidx.lifecycle.observe
and use it like this:
this.viewModel.user.observe(this) { user: User? ->
// ...
}
in Kotlin the Observer { }
lambda gives you param it
, you can rename it as you want and use. by default data will be available with it.something()
etc...
JAVA:
... new Observer {
void onChanged(User user){
user.something()
}
}
KOTLIN
... object : Observer<User> {
fun onChanged(user: User?){
user.something()
}
}
OR
... Observer {
it.something()
}
you can rename it to whatever you want like
... Observer { myUser ->
myUser.something()
}
This is called SAM Conversion, a concept that helps interacting with Java Single Abstract Method Interfaces like in your example.
The following creates an implementation of Runnable
, where the single abstract method is run()
:
val runnable = Runnable { println("This runs in a runnable") }
It’s described in the docs: https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
Alternatively, but more verbose, would be to use an object
:
val runnable2 = object : Runnable {
override fun run() {
println("This runs in a runnable")
}
}
Both are examples of anonymous implementations of that interface
. It's of course also possible to create a concrete subclass and instantiate it then.
class MyRunnable : Runnable {
override fun run() {
println("This runs in a runnable")
}
}
val runnable3 = MyRunnable()