0

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
    }

}
1

1 Answer 1

1

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
    }
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.