Не удается получить доступ к ребенку по идентификатору в пользовательском представлении - PullRequest
0 голосов
/ 21 апреля 2020

Я создал пользовательский поворотный экран, к которому мне нужно прикрепить слушателя из моего фрагмента. Доступ ко всем другим дочерним элементам в представлении по id (или по kotlinx. android .syntheti c id) работает отлично. Тем не менее, это ноль, и я не могу понять, почему. Когда я смотрю на фрагмент в режиме отладки, я вижу его в mChildren, но его mKey равен -1, в то время как все другие представления имеют идентификаторы.

Уродливый обходной путь - найти его прямо так:

val c = layout.getChildAt(layout.childCount - 1) as RotaryKnobView
c.listener = this

, но прямой доступ к нему по id - rotaryKnob.listener - не работает. Конечно, этот подход не будет работать, когда я обновлю фрагмент, чтобы включить больше представлений.

В макете xml он определен следующим образом.

    <geva.oren.android_kotlin_metronome.views.RotaryKnobView
        android:id="@+id/rotaryKnob"
        class="geva.oren.android_kotlin_metronome.views.RotaryKnobView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        app:initialValue="130"
        app:knobDrawable="@drawable/ic_rotary_knob"
        app:layout_constraintStart_toStartOf="@+id/toneButton"
        app:layout_constraintTop_toBottomOf="@+id/toneButton"
        app:maxValue="220"
        app:minValue="40" />

Также - если я установил Идентификатор явно работает, но не так, как нужно. Например:

        val knob = layout.getChildAt(layout.childCount - 1) as RotaryKnobView 
        knob.id = 12345

        val rotaryKnob = layout.findViewById<RotaryKnobView>(12345)
        rotaryKnob.listener = this
        setBpmText(rotaryKnob.value)

Чего мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...