从button继承onClick属性



我正在从Button构建一个自定义视图,并且我想在XML上继承onClick属性。我检查了View源代码并试图复制它,但它使用私有类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

还有类似的相关问题,但它们是没有答案的,而且是古老的。

谢谢!

正如评论中讨论的那样,android:onClickButton或特定的View无关。默认情况下,任何View都有它。我的问题是它与其他东西冲突了。

这是我的Button实现:

class SomeButton() : Button, View.OnClickListener {
// Constructors ignored
override fun onClick(v: View) {
// Code
}
}

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