android 如何 select adapter recyclerview at viewholder 中只有一个按钮?

android how to select only one of button in adapter recycle view at view holder?

如何select 3 个按钮中的唯一一个按钮?目前,我设法 set/unset selected 按钮的背景颜色。但无法 select 唯一一个 selected 按钮。

示例 btn1、btn2、btn3。 当我 selected btn1 时,btn1 的背景变色了,而 btn2 和 btn3 不受影响。之后,当我再次 select 编辑 btn2 时,btn1 背景颜色未设置,btn2 背景颜色发生变化。所以此时 btn2 是 selected 而 btn1 和 btn3 不是 selected.

下面是我的示例代码:

    public class ViewHolder extends RecyclerView.ViewHolder {

    Button mButton;

    public ViewHolder(View v) {
        super(v);
        parentActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                mButton= itemView.findViewById(R.id.mButton);
            }
        });
    }
}

       holder.mButton.setOnClickListener(new DebouncedOnClickListener(500) {
            @Override
            public void onDebouncedClick(View v) {
                if(!holder.mButton.isSelected()){
                    holder.mButton.setSelected(true);
                    setSelectedButton(holder);
                }
                else{
                    holder.mButton.setSelected(false);
                    setSelectedButton(holder);
                }
            }
        });



    private void setSelectedButton(ViewHolder holder){
    if(holder.mButton.isSelected()){
        holder.mButton.setBackgroundColor(parentActivity.getResources().getColor(R.color.unread_notification));
    }
    else{
        holder.mButton.setBackgroundColor(parentActivity.getResources().getColor(R.color.white));
    }
}

我建议您使用 CheckBox 而不是像这样的按钮 -

<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="@drawable/background"
android:orientation="horizontal">

<RadioButton
    android:layout_width="0dp"
    android:layout_height="50dp"
    android:layout_weight="1"
    android:background="@drawable/button_background"
    android:button="@null"
    android:gravity="center"
    android:text="Button 1"
    android:textColor="#fff"
    android:checked="true"
    android:textStyle="bold" />

<RadioButton
    android:layout_width="0dp"
    android:layout_height="50dp"
    android:layout_weight="1"
    android:background="@drawable/button_background"
    android:button="@null"
    android:gravity="center"
    android:text="Button 2"
    android:textColor="#fff"
    android:textStyle="bold" />

<RadioButton
    android:layout_width="0dp"
    android:layout_height="50dp"
    android:layout_weight="1"
    android:background="@drawable/button_background"
    android:button="@null"
    android:gravity="center"
    android:text="Button 3"
    android:textColor="#fff"
    android:textStyle="bold" />
 </RadioGroup>

对于按钮背景 -

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false">
    <shape android:shape="rectangle" >
        <corners android:radius="50dp"/>
        <solid android:color="#c7c7c7"/>
    </shape>
</item>

<item android:state_checked="true">
    <shape android:shape="rectangle" >
        <corners android:radius="50dp"/>
        <gradient android:startColor="#79ccff"
            android:endColor="#7900ca"/>
    </shape>
</item>
</selector>

以及背景 -

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="50dp" />
<solid android:color="#c7c7c7" />
</shape>

您需要在 RecyclerView 中实现选择。经过一番搜索,我发现这个网站可能对你有用

https://medium.com/@maydin/multi-and-single-selection-in-recyclerview-d29587a7dee2