首页 > 解决方案 > Anko ListItem setOnClickListener

问题描述

我正在尝试使用一些 Kotlin 和 Anko(更熟悉 iOS)并从他们的示例中获取以下代码:

internal open class TextListWithCheckboxItem(val text: String = "") : ListItem {
protected inline fun createTextView(ui: AnkoContext<ListItemAdapter>, init: TextView.() -> Unit) = ui.apply {
    textView {
        id = android.R.id.text1
        text = "Text list item" // default text (for the preview)
        isClickable = true
        setOnClickListener {
              Log.d("test", "message")
        }
        init()
    }

    checkBox {
        id = View.generateViewId()
        setOnClickListener {
            Log.d("hi", "bye")
        }
        init()
    }
}.view

我的行显示了我想要的复选框和文本视图。但我想将操作绑定到行选择而不是复选框选择。Putting a log message in both, I see that I get a log message when the row is selected which flips the checkbox. 但是,它不会从 textView 单击处理程序中记录我的“test:message”。有没有办法解决这个问题?

标签: androidkotlinanko

解决方案


显然您的问题已在此处得到解决。由于复选框正在消耗ListItem您的所有焦点,因此应将CheckBox'focusable标志设置为 false:

checkBox {
    focusable = View.NOT_FOCUSABLE
}

不幸的是setFocusable,调用至少需要 API 26,但您可以定义视图 .xml 并手动扩展视图,如下所述

<CheckBox
    ...
    android:focusable="false" />

或者,您可以尝试设置onTouchListener返回false,这意味着触摸事件将传递给底层视图。

让我知道它是否有效;)


推荐阅读