Kotlin / Android - setOnClickListener работает только в одну кнопку - PullRequest
0 голосов
/ 01 января 2019

Я получил recyclerView с несколькими предметами (ViewHolders).В одном из них (ViewHolderItemTratamentos) я получил следующие элементы:

enter image description here

Когда нажата первая «кнопка добавления», через макет инфлятора,такие же элементы (editText и button) создаются под предыдущими.Вот так:

enter image description here

До сих пор все в порядке.Другая строка создается с равным editText и равным button, который получил другой идентификатор, R.id.btn_add_field_din (из раздуваемого макета).Это button прямо здесь имеет ту же логику.Он раздувает ту же схему (та же строка).Но тогда эта третья кнопка не будет работать, и она получила тот же идентификатор (R.id.btn_add_field_din).Я тоже попробовал tag, но это дало мне ту же проблему.

Проблема в том, что я хочу иметь много строк, как мне хочется, но с третьей кнопки setClickOnListener потерял действие .Вы знаете, что может быть?Вот код:

АДАПТЕР:

holder.add_field_button.setOnClickListener {

    holder.parent_linear_layout.apply {
        val inflater = LayoutInflater.from(context)
        val rowView = inflater.inflate(R.layout.used_products_field, this, false)
        holder.parent_linear_layout.addView(rowView, holder.parent_linear_layout.childCount!! - 0)
        holder.add_field_button.text = "-"

        //remove row
        removeField(holder.add_field_button, holder.parent_linear_layout)

        btn_add_field_din.setOnClickListener {
            val inflater = LayoutInflater.from(context)
            val rowView = inflater.inflate(R.layout.used_products_field, this, false)
             holder.parent_linear_layout.addView(rowView, holder.parent_linear_layout.childCount!! - 0)
             btn_add_field_din.text = "-"

        //remove row
        removeField(btn_add_field_din, holder.parent_linear_layout)
        }
     }
  }

РАЗМЕЩЕНИЕ (R.layout.used_products_field):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
    <EditText
        android:id="@+id/number_edit_text"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="5"
        android:focusedByDefault="true"
        android:inputType="phone"/>

    <Button
        android:id="@+id/btn_add_field_din"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        style="@style/botaoCard"
        android:textSize="24dp"
        android:text="+"
        android:padding="5dp"/>

</LinearLayout>

1 Ответ

0 голосов
/ 02 января 2019

То, как вы раздуваете представление, используя синтетические ссылки на внутренние представления. Я не уверен, что это работает так, потому что R создается при компиляции, а не во время выполнения.И я полагаю, что вы используете несколько ViewHolder такого рода внутри RecyclerView.В этом случае один и тот же идентификатор будет установлен для нескольких видов, что невозможно.

Я предполагаю, что btn_add_field_din не ссылается на вид, который вы считаете.Осмотрите это.Попробуйте установить фон Color.RED, посмотрите, правильный ли это вид.

Кроме того, removeField(btn_add_field_din, holder.parent_linear_layout), кажется, удаляет вид, не так ли?

...