当前位置: 首页 > 知识库问答 >
问题:

android如何在视图固定器的适配器回收视图中只选择一个按钮?

孙玮
2023-03-14

如何从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个答案

谢洛城
2023-03-14

我建议你使用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>
胡厉刚
2023-03-14

您需要的是将选择实施到您的回收器视图中。经过一番搜索,我发现这个网站可能对你有用

https://medium.com/@maydin/多选择和单选择在回收器视图d29587a7de2

 类似资料:
  • 我有一个父回收器视图,其中包含一个水平回收器视图作为其项目。在其中,我将显示分类视频。当我开始滚动水平回收器视图时,应用程序崩溃。 错误是: 我的代码是category类 垂直适配器 水平适配器

  • 我正在寻找在Android中使用列表适配器和Recyview适配器的区别。关于性能的任何不同,使用它们的利弊。

  • 我试图使用picasso库将url加载到imageView,但无法获得来正确使用picasso库。

  • 在此处输入图像描述 我有一份父母名单,每个人都有零个或多个孩子,我用回收视图给父母看。我想向家长展示每个回收人员视图项目的标题,下面是向所有孩子展示向孩子展示的最好方式是什么?是否适合在列表视图中显示孩子,或者为每个孩子添加动态视图,如果是的话,如何做到这一点?我已经附上了布局的图像,请检查我的意思,谢谢 在此处输入图像描述

  • 新手在这里。当长时间按下卡片(列表项)时,我很难在单个列表项上实现动画。当我长按一张卡片时,所有卡片都会动画化。有人可以解释为什么只有当回收器View的水平滚动被我禁用时才会发生此问题。 主要活动: 回收器视图适配器:

  • 我已经在我的回收器视图中实现了Admob原生快递广告。它在列表中保留空白,直到广告被加载,如果没有互联网可用。我怎样才能隐藏空白处直到广告加载?谢谢