代码之家  ›  专栏  ›  技术社区  ›  Crystal

Anko ListItem setOnClickListener

  •  0
  • Crystal  · 技术社区  · 8 年前

    我试着和一些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点击处理程序中记录我的“测试:消息”。有办法解决这个问题吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Jakub Licznerski    8 年前

    显然你的问题已经解决了 here .由于复选框正在消耗 ListItem 你应该设定 CheckBox 是的 focusable 标记为false:

    checkBox {
        focusable = View.NOT_FOCUSABLE
    }
    

    不幸地 setFocusable 调用至少需要API 26,但可以定义视图。xml,并按照所述手动膨胀视图 here :

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

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

    让我知道它是否有效;)