如何在自定义适配器内部的生成的按钮中设置一些操作

时间:2019-01-10 15:38:26

标签: android kotlin adapter onclicklistener

我的构图如下:

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!我试图生成ID,但是后来我不知道如何将它们放入数组中。这是删除行的代码:

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

这也是generate_layout的代码:

<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 :(得分:0)

像这样设置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>