Кнопка Radion с одним выбором в представлении Recycler (дубликат) - PullRequest
0 голосов
/ 08 января 2019

У меня есть вид Recycler, который содержал переключатели.

Теперь я хочу выбрать только одну радиокнопку из списка и получить ее значение

в деятельность.

Ниже я прикрепил скриншоты.

Скриншоты вида Recycler

Ниже приведены ссылки, которые я пробовал до сих пор.

  1. http://joshskeen.com/building-a-radiogroup-recyclerview/

  2. Отдельный выбор в RecyclerView

  3. http://www.zoftino.com/android-recyclerview-radiobutton

  4. Выберите только одну радиокнопку в обзоре переработчика

  5. как выбрать только одну кнопку RadioButton с андроидом RecyclerView?

  6. Получение предыдущего значения RadioButton из RadioGroup внутри RecyclerView

  7. Использование переключателя с обзором переработчика в Android

но ничего не выходит.

Вот код для адаптера фильтра

public class FilterValRecyclerAdapter extends 
RecyclerView.Adapter<FilterValRecyclerAdapter.ValueViewHolder> {
    private final FragmentActivity context;
    private final ArrayList<FilterDefaultMultipleListModel> filterModels;
    private FilterDefaultMultipleListModel filterDefaultMultipleListModel;
    private final int resource;
    private final int type;
    OnItemClickListener mItemClickListener;
    private RadioButton lastCheckedRB = null;
    private int rbPosoition =0;
    private int mSelectedItem = -1;

    public FilterValRecyclerAdapter(FragmentActivity context, int 
   filter_list_item_layout,ArrayList<FilterDefaultMultipleListModel> 
   filterModels int type) {
    this.context = context;
    this.filterModels = filterModels;
    this.resource = filter_list_item_layout;
    this.type = type;
  }

@Override
public ValueViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(this.context)
            .inflate(resource, viewGroup, false);
    return new ValueViewHolder(v,this.type);
}

@Override
public void onBindViewHolder(final ValueViewHolder viewHolder, final int 
position) {

    if(type==2){
        viewHolder.rdgCategoryItems.setVisibility(View.VISIBLE);
        viewHolder.rdCategoryItem.setVisibility(View.VISIBLE);
        viewHolder.cbSelected.setVisibility(View.GONE);

   viewHolder.subCategoryName.setText(filterModels.get(position).getName());


        viewHolder.rdCategoryItem.setChecked(position == mSelectedItem);



    }else{
        viewHolder.rdgCategoryItems.setVisibility(View.GONE);
        viewHolder.rdCategoryItem.setVisibility(View.GONE);
        viewHolder.cbSelected.setVisibility(View.VISIBLE);

   viewHolder.subCategoryName.setText(filterModels.get(position).getName());

   viewHolder.cbSelected.setChecked(filterModels.get(position).isChecked());
       }

   }

@Override
public int getItemCount() {
    return filterModels.size();
}

public void setItemSelected(int position) {
    if (position != -1) {
   filterModels.get(position).setChecked
    (!filterModels.get(position).isChecked());
        notifyDataSetChanged();
    }
 }


public interface OnItemClickListener {

    void onItemClick(View view, int position);
}

public void setOnItemClickListener(final OnItemClickListener 
 mItemClickListener) {
    this.mItemClickListener = mItemClickListener;
 }

public class ValueViewHolder extends RecyclerView.ViewHolder implements
        View.OnClickListener {

    TextView subCategoryName;
    CheckBox cbSelected;
    RadioButton rdCategoryItem;
    RadioGroup rdgCategoryItems;
    View colorView;
    public int type;

    ValueViewHolder(View itemView, int type) {
        super(itemView);
        itemView.setOnClickListener(this);
        subCategoryName = (TextView) 
        itemView.findViewById(R.id.txt_item_list_title);
        cbSelected = (CheckBox) itemView.findViewById(R.id.cbSelected);
        rdCategoryItem = (RadioButton) 
        itemView.findViewById(R.id.rdCategoty);
        rdgCategoryItems = (RadioGroup) 
        itemView.findViewById(R.id.rdgCategory);
        colorView = itemView.findViewById(R.id.colored_bar);
        this.type = type;


    }

    @Override
    public void onClick(View v) {
        if (mItemClickListener != null) {
            mItemClickListener.onItemClick(v, getPosition());


        }
      }
   }
  }

Любая помощь будет оценена.

Заранее спасибо.

1 Ответ

0 голосов
/ 08 января 2019

Добавьте ваш onCheckedChnageListener() в ваш onBindViewHolder() метод и сохраните ваш mSelectedItem внутри onCheckedChnageListener()

 viewHolder.rdCategoryItem.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
             mSelectedItem=position;
             notifyDataSetChanged();
            }
        });
...