Anko ListItem setOnClickListener - PullRequest
       6

Anko ListItem setOnClickListener

0 голосов
/ 02 июня 2018

Я пытаюсь поиграться с некоторыми 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

Моя строка отображается так, как я хочу, с флажкоми текстовое представление.Но я хочу привязать действие к выбору строки, а не к флажку.Помещая в оба сообщения журнала, я вижу, что при выборе строки появляется сообщение журнала, которое ставит флажок.Однако он не регистрирует мое «test: message» из обработчика щелчков textView.Есть ли способ обойти это?

1 Ответ

0 голосов
/ 03 июня 2018

Видимо, ваша проблема была решена здесь .Поскольку этот флажок использует весь фокус ListItem, необходимо установить для флага CheckBox s focusable значение false:

checkBox {
    focusable = View.NOT_FOCUSABLE
}

К сожалению, для вызова setFocusable требуется как минимум API 26, но выможно определить представление .xml и накачать представление вручную, как описано здесь :

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

В качестве альтернативы вы можете попробовать установить onTouchListener, возвращая false, что означает, что событие касания будет пройденок основным представлениям.

Дайте мне знать, если это работает;)

...