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
的所有焦点,您应该将 CheckBox
的 focusable
标志设置为 false:
checkBox {
focusable = View.NOT_FOCUSABLE
}
不幸的是,setFocusable
调用至少需要 API 26,但您可以定义视图 .xml 并按照 here:[=20= 所述手动膨胀视图]
<CheckBox
...
android:focusable="false" />
或者您可以尝试设置一个 onTouchListener
返回 false
,这意味着触摸事件将被传递到底层视图。
让我知道它是否有效 ;)
我正在尝试使用一些 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
的所有焦点,您应该将 CheckBox
的 focusable
标志设置为 false:
checkBox {
focusable = View.NOT_FOCUSABLE
}
不幸的是,setFocusable
调用至少需要 API 26,但您可以定义视图 .xml 并按照 here:[=20= 所述手动膨胀视图]
<CheckBox
...
android:focusable="false" />
或者您可以尝试设置一个 onTouchListener
返回 false
,这意味着触摸事件将被传递到底层视图。
让我知道它是否有效 ;)