Как установить некоторые действия в сгенерированных кнопках внутри пользовательского адаптера - PullRequest
0 голосов
/ 10 января 2019

Мне достался следующий состав:

enter image description here

Этот макет является предметом моего RecyclerView.Adapter. Кнопка X (holder.delete_button) при нажатии удаляет себя и EditText; в основном это удаляет строку.

Кнопка ДОБАВИТЬ ПОЛЕ добавляет новые строки (по инфлятору):

enter image description here

Вот код для добавления новой строки:

  holder.add_field_button.setOnClickListener {
      holder.parent_layout.apply {
          val inflater = LayoutInflater.from(context)
          val rowView = inflater.inflate(R.layout.generated_layout, this, false)
          holder.parent_layout.addView(rowView, holder.parent_layout.childCount!! - 0)
      }
  }

Моя проблема в том, что Я просто могу удалить первую строку , потому что это единственный button, который я могу инициализировать в ViewHolder с помощью id из delete_button. Но для следующих кнопок X я не могу делать никаких действий , потому что кнопка находится во внешнем макете, надутом, называемом generated_layout! Я пытался генерировать идентификаторы, но потом я не знаю, как поместить их в массив. Вот код для удаления строки:

holder.delete_button.setOnClickListener{
    holder.parent_layout.removeView(holder.delete_button.parent as View)
}

Вот также код сгенерированного_слоя:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="50dp"
              android:orientation="horizontal" >
    <EditText
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="5"
            android:inputType="phone"/>
    <Button
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_weight="0"
            android:background="@android:drawable/ic_delete"/>
</LinearLayout>

1 Ответ

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

Установите прослушиватель onClick следующим образом

holder.add_field_button.setOnClickListener {
      holder.parent_layout.apply {
          val inflater = LayoutInflater.from(context)
          val rowView = inflater.inflate(R.layout.generated_layout, this, false)
          val rowViewDeleteButton=rowView.findViewById(R.id.deletebutton)
          rowViewDeleteButton.setOnClickListener{
            holder.parent_layout.removeView(it.parent as View)
          }

          holder.parent_layout.addView(rowView, holder.parent_layout.childCount!! - 0)
      }
  }

И дайте id вашей кнопке удаления:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="50dp"
              android:orientation="horizontal" >
    <EditText
            android:id="@+id/text"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="5"
            android:inputType="phone"/>
    <Button
            android:id="@+id/deletebutton"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_weight="0"
            android:background="@android:drawable/ic_delete"/>
</LinearLayout>
...