Reputation: 189
I want to set a listener in kotlin. Is there a way we can set it just similar to java lambda function (this::methodName)?
i tried converting it to kotlin automatically but it gives me error InterfaceListener does not have constructors
public class TestActivity {
private Listener mListener;
private void init(){
setListener(this::onDataAdded);
}
private void onDataAdded(TestData testData) {
}
public void setListener(Listener listener) {
this.mListener = listener;
}
interface Listener{
void onDataAdded(TestData testData);
}
class TestData {
String data;
}
}
java to kotlin IDE converstion error message InterfaceListener does not have constructors
class TestActivity {
private var mListener: Listener? = null
private fun init() {
setListener(Listener { this.onDataAdded(it) })
}
private fun onDataAdded(testData: TestData) {
}
fun setListener(listener: Listener) {
this.mListener = listener
}
internal interface Listener {
fun onDataAdded(testData: TestData)
}
internal inner class TestData {
var data: String? = null
}
}
Upvotes: 0
Views: 235
Reputation: 8442
You can move your Listener
interface to Java file so setListener(Listener { this.onDataAdded(it) })
will work.
Or you can use a function instead of the listener like this:
typealias Listener = (TestActivity.TestData) -> Unit
class TestActivity {
private var mListener: Listener? = null
private fun init() {
setListener(this::onDataAdded)
}
private fun onDataAdded(testData: TestData) {
}
fun setListener(listener: Listener) {
this.mListener = listener
}
inner class TestData {
var data: String? = null
}
}
Upvotes: 1