android如何仅选择视图持有者在适配器回收视图中的按钮之一?

时间:2018-10-18 04:24:04

标签: android android-studio android-recyclerview android-adapter

如何从3个按钮中选择唯一的1个按钮?我设法设置/取消当前所选按钮的背景色。但是不能选择唯一的一个选定按钮。

示例btn1,btn2,btn3。 当我选择btn1时,btn1的背景是更改颜色的,而btn2和btn3则不受影响。之后,当我再次选择btn2时,未设置btn1背景色,而btn2背景变为了变色。因此,此时选择了btn2,而未选择btn1和btn3。

以下是我的示例代码:

    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));
    }
}

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:-2)

我建议您使用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>

对于Button背景-

<?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>