Android, как выбрать только одну из кнопок в представлении адаптера корзины в представлении держателя? - PullRequest
0 голосов
/ 18 октября 2018

Как выбрать только 1 кнопку из 3 кнопок?Мне удается установить / сбросить цвет фона на выбранной кнопке на данный момент.Но не в состоянии выбрать только одну выбранную кнопку.

Пример 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 голосов
/ 18 октября 2018

Что вам нужно, это реализовать выбор в вашем RecyclerView.После некоторых поисков я обнаружил, что этот сайт может быть полезен для вас

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

0 голосов
/ 18 октября 2018

Я предлагаю вам использовать 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>
...