如何在整个回收视图行上点击复选框进行检查

问题描述 投票:0回答:2

现在,每次点击复选框时,我都会像这样注册一个复选框

 inner class OrdersInnerViewHolder(itemView: View): BaseViewHolder<Cart>(itemView){
        override fun bind(item: Cart, position: Int) {

            itemView.checkBox.setOnCheckedChangeListener { buttonView, isChecked ->
                item.isChecked = isChecked
                if(isChecked){
                 map.put(position,true)
                }else{
                    map.remove(position,true)
                }
            }
        }
    }

我打算点击整行来勾选或取消勾选我的项目,现在我知道如何对整行进行点击,但没有如何设置勾选改变的监听器。

 inner class OrdersInnerViewHolder(itemView: View): BaseViewHolder<Cart>(itemView){
            override fun bind(item: Cart, position: Int) {

            itemView.setOnClickListener { 
                //How to perform checkbox check and uncheck clicking on the entire row instead of the checkbox ?
            }
                itemView.checkBox.setOnCheckedChangeListener { buttonView, isChecked ->
                    item.isChecked = isChecked
                    if(isChecked){
                     map.put(position,true)
                    }else{
                        map.remove(position,true)
                    }
                }
            }
        }

由于复选框有选中的监听器,我没有办法在点击整个视图时与之交互。

我计划让我的用户点击复选框和整个行来选择或取消选择这个复选框。

XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:tools="http://schemas.android.com/tools"
    android:weightSum="3"
    android:orientation="horizontal">

    <CheckBox
        android:id="@+id/checkBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/item_name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_marginBottom="16dp"
        android:text="Test " />

    <TextView
        android:id="@+id/item_qty"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_weight="1"
        android:text="Qty: 2" />

    <TextView
        android:id="@+id/item_price"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_weight="1"
        tools:text="$100.00"/>

</LinearLayout>

有什么想法吗?

android kotlin android-recyclerview android-checkbox
2个回答
1
投票

为父视图添加一个OnClickListener,用于切换CheckBox。OnCheckedChangeListener仍然会在父视图的点击监听器改变选中状态时被调用。

itemView.setOnClickListener {
    itemView.checkBox.isChecked = !itemView.checkBox.isChecked
}

为了让父视图的外观和行为正确,你可以在XML中添加这些元素。

android:background="?android:attr/selectableItemBackground"
android:clipToPadding="false"
android:focusable="true"

IIRC,将OnCheckedChangeListener添加到CheckBox中会自动使其可点击。你可以考虑设置 itemView.checkBox.isClickable = false 这样即使你点击CheckBox,你的整个列表项也会显示波纹效果。

附注:不要忘了设置CheckBox的初始状态。onBindView:

itemView.checkBox.isChecked = item.isChecked

当它滚动到屏幕上的时候会有一个不可预知的状态,否则!


-1
投票

首先在你的 LinearLayout 然后在java中声明

那就按照我的代码来改吧。

inner class OrdersInnerViewHolder(itemView: View): BaseViewHolder<Cart>(itemView){
            override fun bind(item: Cart, position: Int) {

            itemView.setOnClickListener { 
                //How to perform checkbox check and uncheck clicking on the entire row instead of the checkbox ?
            }
                linearLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(itemView.checkBox.isChecked){
                map.put(position,true)
            }else{
                map.remove(position,true)
            }
        }
    });
                }
            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.