Tengo un recyclerview en el que cada elemento tiene 3 botones de opción que se agrupan en un radiogroup. Ahora un usuario puede seleccionar sólo un radiobutton por elemento en recyclerview. Pero quiero que el usuario seleccione sólo un botón de radio en todo el recyclerview. Cómo se consigue esto?

Este es el aspecto que tiene actualmente.

Seleccione sólo un radiobutton en un recyclerview

Me gustaría hacer posible la verificación de sólo 1 botón de radio de todo el reciclador de vista. Si el 1 de botón de radio en el primer punto es marcado y después de que el usuario hace clic en el 2do radiobutton en el 2º punto, entonces, la 1ª radiobutton en el 1er elemento debe obtener desactivada.

  • cuando cada vez que el usuario hace clic en el botón de radio de guardar el id de la radio y botón de llamada notifydatasetchanged() y en OnBindViewHolder marque el botón de radio que ha guardado, mientras que el usuario de clic.
  • por favor, puedes elaborar un poco más sobre cómo el código debe ser?
InformationsquelleAutor suku | 2016-02-05

6 Comentarios

  1. 18

    Aquí es otro método para hacer lo mismo. Esto es más elegante que la de mi anterior respuesta. Pero he guardado tanto como la respuesta anterior proporciona más flexibilidad.

    private RadioButton lastCheckedRB = null;
    ...
    @Override
    public void onBindViewHolder(final CoachListViewHolder holder, final int position) {
       holder.priceRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                RadioButton checked_rb = (RadioButton) group.findViewById(checkedId);
                if (lastCheckedRB != null) {
                    lastCheckedRB.setChecked(false);
                }
                //store the clicked radiobutton
                lastCheckedRB = checked_rb;
            }
        });
  2. 12

    Aquí es lo que funcionó para mí:

     private RadioButton lastCheckedRB = null;
     ...
     @Override
     public void onBindViewHolder(final CoachListViewHolder holder, final int position) {
      View.OnClickListener rbClick = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                RadioButton checked_rb = (RadioButton) v;
                if(lastCheckedRB != null){
                    lastCheckedRB.setChecked(false);
                }
                lastCheckedRB = checked_rb;
            }
        };
    
        //price_1m, price3m, price_6m are RadioButtons inside a radiogroup
        holder.price1m.setOnClickListener(rbClick);
        holder.price3m.setOnClickListener(rbClick);
        holder.price6m.setOnClickListener(rbClick);

    Aquí, el botón de radio se almacena temporalmente en lastCheckedRB. Cuando un nuevo botón de radio que se hace clic, el antiguo botón de radio está desactivada. Inicialmente el lastCheckedRB se establece en null.

  3. 1

    A los que me enfrentaba problemas con la aceptación de la respuesta.
    A veces se hace actualmente comprueba que el botón de radio desactivada dejando el no de los botones de radio seleccionada. Esto sucedía cuando se selecciona un botón de radio en diferentes grupos de radio después de seleccionar el botón de radio a partir de uno de los grupos.

    Aquí está la solución, en lugar de guardar la última comprobación RadioButton, guardar la última comprobación RadioGroup y borrar la última verificar si la última comprobación RadioGroup no es actual y tiene un RadioButton seleccionado como se muestra a continuación.

    Para obtener más información, lea la http://www.zoftino.com/android-recyclerview-radiogroup

       priceGroup = (RadioGroup) view.findViewById(R.id.price_grp);
    
        priceGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
    
                if (lastCheckedRadioGroup != null
                        && lastCheckedRadioGroup.getCheckedRadioButtonId()
                                         != radioGroup.getCheckedRadioButtonId()
                        && lastCheckedRadioGroup.getCheckedRadioButtonId() != -1) {
                    lastCheckedRadioGroup.clearCheck();
    
                    Toast.makeText(PackageRecyclerViewAdapter.this.context,
                            "Radio button clicked " + radioGroup.getCheckedRadioButtonId(),
                            Toast.LENGTH_SHORT).show();
    
                }
                lastCheckedRadioGroup = radioGroup;
    
            }
        });
  4. 1

    He utilizado este enfoque

    public class OffersRecyclerViewAdapter extends RecyclerView.Adapter<OffersRecyclerViewAdapter.ViewHolder> {
    private List<OffersModel> offersList;
    private Context context;
    private int lastSelectedPosition = -1;
    public OffersRecyclerViewAdapter(List<OffersModel> offersListIn, Context ctx) {
    offersList = offersListIn;
    context = ctx;
    }
    @Override
    public OffersRecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.offer_item, parent, false);
    OffersRecyclerViewAdapter.ViewHolder viewHolder =
    new OffersRecyclerViewAdapter.ViewHolder(view);
    return viewHolder;
    }
    @Override
    public void onBindViewHolder(OffersRecyclerViewAdapter.ViewHolder holder, int position) {
    //since only one radio button is allowed to be selected,
    //this condition un-checks previous selections
    holder.selectionState.setChecked(lastSelectedPosition == position);
    }
    @Override
    public int getItemCount() {
    return offersList.size();
    }
    public class ViewHolder extends RecyclerView.ViewHolder {
    public RadioButton selectionState;
    public ViewHolder(View view) {
    super(view);
    selectionState = (RadioButton) view.findViewById(R.id.offer_select);
    selectionState.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    lastSelectedPosition = getAdapterPosition();
    notifyDataSetChanged();
    }
    });
    }
    }
    }
    • esto es sólo un botón de radio en recyclerview
  5. 0

    Intentar algo similar:

    public void onCheckedChanged(RadioGroup radioGroup, int checkedItemId) {
    mCheckedId = checkedItemId;
    mSelectedPosition = getAdapterPosition();
    }

    El código de arriba es el que escucha usted se inscribe para el RadioGroup dentro de onCreateViewHolder(). El prefijo elementos son tus campos en el adaptador.

    En onBindViewHolder():

    if (position == mSelectedPosition) {
    holder.radioGroup.check(mCheckedId);
    } else {
    holder.radioGroup.clearCheck();
    }

    Se debe trabajar de esta manera.

  6. 0
    final String[] country_selcted = new String[1];
    holder.rb_team_one.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
    if(b==true)
    country_selcted[0] =holder.rb_team_one.getText().toString();
    else
    country_selcted[0] =holder.rb_team_two.getText().toString();
    }
    });

    Ahora de Impresión country_selcted[0] se le da a la fila de radio de la selección de grupo único resultado

    • Por favor use el formato correcto.
    • esto va a marcar componentes radiobutton comprueba cuando se desplaza

Dejar respuesta

Please enter your comment!
Please enter your name here