Select 来自 recyclerView 的项目中的一个复选框并取消选择先前选择的复选框

Select one checkBox in item from recyclerView and deselect previously selected checkBox

我有 recycler-view 部分。该项目包括行和标题。我想 select 一个带复选框的项目,如果用户 select 下一个我想 deselect 旧的那个(复选框)。我找不到任何地方可以实现此功能。

这是我的代码

recyclerView = (RecyclerView)findViewById(R.id.recyclerViewActivityExample);
    recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));

    list = new ArrayList<>();
    list.add(new AnimalObject("Cat","Mammals", false));
    list.add(new AnimalObject("Lion","Mammals", false));
    list.add(new AnimalObject("Dog","Mammals", false));
    list.add(new AnimalObject("Monkey","Mammals", false));
    list.add(new AnimalObject("Puma","Mammals", false));

    list.add(new AnimalObject("Albatross","Birds", false));
    list.add(new AnimalObject("Pigeon","Birds", false));

    list.add(new AnimalObject("Crabs","Aquatic Animals", false));
    list.add(new AnimalObject("Sharks","Aquatic Animals", false));

    MyAdapter myAdapter = new MyAdapter();


    sectionedRecyclerViewAdapter = new SectionedRecyclerViewAdapter(getApplicationContext(),
            R.layout.layout_list_section, R.id.textViewItemSection, myAdapter, this);
    sectionedRecyclerViewAdapter.setSections(list);

    recyclerView.setAdapter(sectionedRecyclerViewAdapter);

}





 //-------------------Adapter----------------------------
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> implements MyViewHolder.ViewHolderClickListener {

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

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View itemView = LayoutInflater.
                from(parent.getContext()).
                inflate(R.layout.layout_list_item, parent, false);

        return new MyViewHolder(itemView,this);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {

        AnimalObject animalObject = list.get(position);

        holder.title.setText(animalObject.name);

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // checkbox.setChecked(true);
                row_index = position;
                notifyDataSetChanged();
            }
        });

        if (row_index == position) {
            holder.checkBox.setChecked(true);
        } else {
            holder.checkBox.setChecked(false);
        }
    }

    @Override
    public void onClick(View v) {

        Toast.makeText(getApplicationContext(), list.get(sectionedRecyclerViewAdapter.getIndexForPosition(recyclerView.getChildPosition(v))).name,Toast.LENGTH_SHORT).show();

    }
}

// 适配器

 public String name;
public String type;
public boolean ischecked ;

public AnimalObject(final String name, final String type, boolean ischecked){

    this.name = name ;
    this.type = type ;
    this.ischecked = ischecked;
}
public boolean ischecked() {
    return ischecked;
}

public void setIschecked(boolean ischecked) {
    this.ischecked = ischecked;
}

在你的Adapter

里面

使用这个:
private int row_index;

   @Override
    public void onBindViewHolder(final Main_Page_Payment_Cash_Adapter.ViewHolder holder, final int position) {

             holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // checkbox.setChecked(true);
                    row_index = position;
                    notifyDataSetChanged();
                }
            });

            if (row_index == position) {
              // checkbox.setChecked(true);
            } else {
               // checkbox.setChecked(false);
            }
    }

希望这就是您要找的。

 @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {

        AnimalObject animalObject = list.get(position);

        holder.title.setText(animalObject.name);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AnimalObject animalObject = list.get(position);
                int currentCheckedStatus = animalObject.ischecked();
                for (int i =0;i<list.size();i++)
                {

                    if (i==position)
                    {
                        animalObject.setIschecked(!currentCheckedStatus);
                    }
                    else
                    {
                        animalObject.setIschecked(false);
                    }
                }
                notifyDataSetChanged();
            }
        });

            holder.checkBox.setChecked(animalObject.ischecked());
    }

完整示例

public class ChildAddressAdapter extends 
        RecyclerView.Adapter<ChildAddressAdapter.CartViewHolder> {

private Activity context;

private List<AddressDetail> addressDetailList;

private int selectedPosition = -1;

public ChildAddressAdapter(Activity context, List<AddressDetail> addressDetailList) {
    this.context = context;
    this.addressDetailList = addressDetailList;
}

@NonNull
@Override
public CartViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    LayoutInflater inflater = LayoutInflater.from(context);
    View myView = inflater.inflate(R.layout.address_layout, parent, false);
    return new CartViewHolder(myView);
}

@Override
public void onBindViewHolder(@NonNull CartViewHolder holder, int position) {

    holder.adress_checkbox.setOnClickListener(view -> {
        selectedPosition = holder.getAdapterPosition();
        notifyDataSetChanged();
    });

    if (selectedPosition==position){
        holder.adress_checkbox.setChecked(true);
    }
    else {
        holder.adress_checkbox.setChecked(false);
    }


}

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

class CartViewHolder extends RecyclerView.ViewHolder
{
    TextView address_text,address_tag;
    CheckBox adress_checkbox;

    CartViewHolder(View itemView) {
        super(itemView);
        address_text = itemView.findViewById(R.id.address_text);
        address_tag = itemView.findViewById(R.id.address_tag);
        adress_checkbox = itemView.findViewById(R.id.adress_checkbox);
    }
}}