Anko ListItem setOnClickListener

时间:2018-06-01 21:10:48

标签: android kotlin anko

我试图与一些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

我的行显示了我想要的复选框和textview。但我想将一个动作绑定到行选择而不是复选框选择。在两者中都放入一条日志消息,我看到当选中该行时会触发复选框时会收到一条日志消息。但是,它不会记录我的测试:消息&#34;从textView单击处理程序。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

显然您的问题已得到解决here。由于复选框正在消耗ListItem的所有焦点,因此您应将CheckBox的{​​{1}}标记设置为false:

focusable

不幸的是,checkBox { focusable = View.NOT_FOCUSABLE } 调用至少需要API 26,但您可以定义视图.xml并按照here所述手动对视图进行充气:

setFocusable

或者,您可以尝试设置<CheckBox ... android:focusable="false" /> 返回onTouchListener,这意味着触摸事件将传递给基础视图。

让我知道它是否有效;)