Anko ListItem setOnClickListener

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"。有办法解决这个问题吗?

显然您的问题已得到解决 here。由于复选框占用了 ListItem 的所有焦点,您应该将 CheckBoxfocusable 标志设置为 false:

checkBox {
    focusable = View.NOT_FOCUSABLE
}

不幸的是,setFocusable 调用至少需要 API 26,但您可以定义视图 .xml 并按照 here:[=20= 所述手动膨胀视图]

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

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

让我知道它是否有效 ;)