当OnClickListener在customview按钮中实现时,XML的Android onclick不工作。

问题描述 投票:1回答:1

我需要一个小的动画,当用户点击一个按钮,当动画结束时,它应该执行点击动作。

XML

<com.customview.CustomButton
            android:id="@+id/btn_submit"
            bind_fontStyle="@{@string/button_bold}"
            android:layout_width="@dimen/standard_button_width"
            android:layout_height="@dimen/standard_button_height"
            android:text="@{viewModel.btnText}"
            android:onClick="@{()->viewModel.onButtonClick(true)}"
            android:visibility="@{viewModel.isButtonVisible() ? View.VISIBLE : View.GONE}"
            />

自定义类

class CustomButton : AppCompatButton, View.OnClickListener {

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

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

constructor(context: Context) : super(context) {
    init()
}

private fun init() {
    setOnClickListener(this)
}

override fun onClick(v: View) {
    v.post(Runnable {
        v.animate().scaleX(1.05f).scaleY(1.05f).setDuration(200).withEndAction {
            v.animate().scaleX(1f).scaleY(1f).setStartDelay(200)

        }
    })
}

}

我试着在自定义视图中覆盖OnClickListener,在点击时我做了动画,但问题是它没有调用xml的android:onClick。

android kotlin android-custom-view android-databinding
1个回答
1
投票

这样做是行不通的,因为你正试图在这些地方的视图上设置多个点击听筒。

android:onClick="@{()->viewModel.onButtonClick(true)}"

setOnClickListener(this)

如果我对你的问题理解正确的话,一旦用户点击按钮,首先应该发生动画,然后在相应的视图模型中进行操作。

你可以在CustomButton类和ViewModel之间实现一个接口。

interface CustomButtonClickListener {
fun onClick()
}

在你的ViewModel中实现这个接口。通过数据绑定,将这个接口监听器发送到带有自定义属性的CustomButton。就像这样。

<data>
<variable name="vm"
          type="*path_vm*" />
</data>

然后把这个vm传给你的CustomLabel。

app:listener="@{vm}"

您可以参考 这个 为您的CustomLabel类创建自定义属性。

现在,在你的按钮动画结束后,你只需要调用接口方法,ViewModel的重写方法就会被调用。

listener.onClick()

如果你有任何其他问题,请告诉我:)

© www.soinside.com 2019 - 2024. All rights reserved.