【问题标题】:equivalent implementing java interface on kotlin在 kotlin 上等效实现 java 接口
【发布时间】:2017-12-30 19:14:48
【问题描述】:

我是Kotlin 的新手,我想知道如何在 kotlin 上实现 java 接口,我在 android 上使用它,

public interface OnClickedItemListener {
    void onClick(boolean state);
}

OnClickedItemListener 是我想要实现的自定义接口,在 kotlin 中我有这个类:

class MyProgressView : RelativeLayout {
    constructor(context: Context?) : super(context) {
        init()
    }

    constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
        init()
    }

    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
        init()
    }

    private fun init() {
        LayoutInflater.from(context).inflate(R.layout.download_progress_layout, this)
        cusotmView.setOnClickListener {
        }
    }
}

这相当于这个代码,例如:

class MyProgressView : RelativeLayout {
    constructor(context: Context?) : super(context) {
        init()
    }

    constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
        init()
    }

    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
        init()
    }

    private fun init() {
        LayoutInflater.from(context).inflate(R.layout.download_progress_layout, this)
        cusotmView.setOnClickListener {
            /*
            if(onitemClickListener!=null) onitemClickListener.onClick()
            */
        }
    }

    /*
    public interface OnitemClickListener{
        void onClick();
    }

    public static void setOnitemClickListener(OnitemClickListener listener){
        onitemClickListener = l;
    }
    */

}

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    在您的 Activity 中使用 setOnClickItemListener

    class MyProgressView : RelativeLayout, OnClickedItemListener  {
    
        var onClickItemListener: OnClickedItemListener? = null
    
        constructor(context: Context?) : super(context) {
            init()
        }
    
        constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
            init()
        }
    
        constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
            init()
        }
    
        private fun init() {
            LayoutInflater.from(context).inflate(R.layout.download_progress_layout, this)
        }
    
        override fun onClick(state: Boolean) {
            //do something on onclick
        }
    
        fun setOnClickedItemListener(onclickItemListener: OnClickedItemListener) {
            this.onClickItemListener = onclickItemListener
        }
    
    }
    

    希望对你有帮助。

    【讨论】:

    • 谢谢,现在我如何在活动中使用这个实现的监听器?例如:MyProgressView.setOnitemClickListener(new OnitemClickListener(){}};
    猜你喜欢
    • 1970-01-01
    • 2021-01-29
    • 2018-01-29
    • 2016-06-08
    • 2019-12-26
    • 1970-01-01
    • 2014-02-15
    • 2017-10-23
    • 2021-05-26
    相关资源
    最近更新 更多