如何在回收器视图中只选择一个开关?

lmyy7pcs  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(330)

我在尝试向回收器适配器的每个元素添加开关时遇到了一个问题。我想要实现的是一次只选择一个开关,所以每当我检查一个开关时,其他开关都应该自动取消选中。
这是我当前使用的回收器适配器代码:

  1. public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
  2. private final DomainAdapter DA = DomainAdapter.getInstance();
  3. private final ArrayList<ArrayList<String>> list;
  4. private String selected;
  5. public RecyclerAdapter(ArrayList<ArrayList<String>> list, String selected) {
  6. this.list = list;
  7. this.selected = selected;
  8. }
  9. @NonNull
  10. @Override
  11. public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  12. LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
  13. View view = layoutInflater.inflate(R.layout.list_element, parent, false);
  14. return new ViewHolder(view);
  15. }
  16. @Override
  17. public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
  18. if (list.get(position).get(0).equals(selected)) holder.switchButton.setChecked(true);
  19. else holder.switchButton.setChecked(false);
  20. holder.switchButton.setOnCheckedChangeListener((toggleButton, isChecked) -> {
  21. if (isChecked) {
  22. try {
  23. DA.select(list.get(position).get(0));
  24. } catch (NoSuchMethodException ignore) {}
  25. }
  26. else {
  27. }
  28. });
  29. }
  30. @Override
  31. public int getItemCount() {
  32. return list.size();
  33. }
  34. class ViewHolder extends RecyclerView.ViewHolder {
  35. Switch switchButton;
  36. public ViewHolder(@NonNull View itemView) {
  37. super(itemView);
  38. switchButton = itemView.findViewById(R.id.switchButton);
  39. }
  40. }
  41. }

如果有人能告诉我我做错了什么,我会非常感激的。
谢谢您!

xcitsw88

xcitsw881#

你的逻辑有点不正确。
您需要:

  1. if (list.get(position).get(0).equals(selected)) holder.switchButton.setChecked(true);
  2. else holder.switchButton.setChecked(false);

这将调用checkedchange监听器,您稍后将在第一次设置行之后的下一次迭代中设置该监听器。
删除checkchangelistener并改为设置click listener。
另外,在 onCreateViewHolder 而不是在 onBindViewHolder ```
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View view = layoutInflater.inflate(R.layout.list_element, parent, false);
ViewHolder vh = new ViewHolder(view);
vh.switchButton.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View view) {
setItemSelected(vh.getAdapterPosition());
}
});

  1. return vh;

}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position)
{
boolean isSelected = list.get(position).get(0).equals(selected);
holder.switchButton.setChecked(isSelected);

}

private void setItemSelected(int position) {
DA.select(list.get(position).get(0));
selected = list.get(position).get(0);
notifyDataSetChanged();
}

展开查看全部

相关问题