Kotlin / Android-setOnClickListener仅在一个按钮中起作用

时间:2019-01-01 18:51:53

标签: android button kotlin onclicklistener layout-inflater

我有一个recyclerView,其中有多个项目(ViewHolders)。在其中一个(ViewHolderItemTratamentos)中,我获得了以下元素:

enter image description here

当单击第一个“添加按钮”时,通过充气机布局,相同的元素(editTextbutton)将在前一个元素下方创建。就是这样:

enter image description here

直到这里,一切都还好。使用相等的editText和相等的button创建另一行,该行具有不同的ID R.id.btn_add_field_din(来自夸大的布局)。此处的button具有相同的逻辑。它使相同的布局(同一行)膨胀。但是,这第三个按钮将不起作用,并且具有相同的ID(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 :(得分:0)

使用对内部视图的综合引用来使视图膨胀的方式。我不确定这种方式是否起作用,因为R是在编译而非运行时创建的。我想您在RecyclerView中使用了多个此类ViewHolder。在这种情况下,将同一ID设置为多个视图,这是不可能的。

我的猜测是btn_add_field_din没有引用您认为的视图。检查一下。尝试设置背景Color.RED,看看是否正确。

另外,removeField(btn_add_field_din, holder.parent_linear_layout)似乎删除了视图,是吗?