首页 > 解决方案 > 从按钮继承 onClick 属性

问题描述

我正在从 a 构建自定义视图Button,并且我想继承onClickXML 上的属性。我检查了View源代码并试图复制它,但它使用 private class AppCompatViewInflater.DeclaredOnClickListener

    case R.styleable.View_onClick:
        if (context.isRestricted()) {
            throw new IllegalStateException("The android:onClick attribute cannot "
                    + "be used within a restricted context");
        }

        final String handlerName = a.getString(attr);
        if (handlerName != null) {
            setOnClickListener(new DeclaredOnClickListener(this, handlerName));
        }
        break;

我觉得应该有一种更简单的方法可以做到这一点,而无需进入这个兔子洞。

我目前收到此错误:

    <com.domain.SomeButton
        <!---Other stuff-->
        android:onClick="@{() -> viewmodel.doSomething()}" />
Cannot assign callback expression to 'android:onClick'

Make sure you aren't using lambda syntax if the expression should only return a value directly

有类似这样的相关问题,但它们没有答案且陈旧。

谢谢!

标签: androidandroid-studioandroid-layoutandroid-viewandroid-button

解决方案


正如评论中所讨论的,android:onClick不依赖于Button或特定的View. 任何View默认情况下都有它。我的问题是它与其他东西发生冲突。

这是我的Button实现:

class SomeButton() : Button, View.OnClickListener {

    // Constructors ignored

    override fun onClick(v: View) {
        // Code
    }
}

override fun onClick干扰了android:onClickXML 属性。删除它可以解决问题,但使用android:onClickListener也可以。


推荐阅读