当点击 itme 上的 复选框是 ,下拉itme 复用 产生 复选框选择混乱 主要解决方案 点击CheckBox 的时候 设置监听 监听到 当前状态 。保存到Map集合 里面 。 判断集合里面的属性就可以了
public class Recycle_Adapter extends RecyclerView.Adapter<Recycle_Adapter.ViewHoder> { private Context mContext; private List<String> data; private LayoutInflater layoutInflater; private Map<Integer, Boolean> map = new HashMap<>();//1 创建 存放 复习框点击状态 public Recycle_Adapter(Context mContext, List<String> data) { this.mContext = mContext; this.data = data; layoutInflater = LayoutInflater.from(mContext); initMap();// 2 初始化 复选框状态 } @NonNull @Override public ViewHoder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { View inflate = layoutInflater.inflate(R.layout.layout_itme, viewGroup, false); return new ViewHoder(inflate); } @Override public void onBindViewHolder(@NonNull ViewHoder viewHoder, final int i) { viewHoder.name.setText(data.get(i) + " /"+i); //3 设置 点击事件 改变 复选框状态 viewHoder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { map.put(i, isChecked);//4 保持点击状态 } }); // 设置CheckBox的状态 判断 如果没有 点击默认为 false if (map.get(i) == null) { map.put(i, false); } //最后 设置 复选框 状态 滑动不会改变 状态 viewHoder.checkBox.setChecked(map.get(i)); } @Override public int getItemCount() { return data.size(); } public class ViewHoder extends RecyclerView.ViewHolder { private final TextView name; private final CheckBox checkBox; public ViewHoder(View itemView) { super(itemView); name = itemView.findViewById(R.id.text_mes); checkBox = itemView.findViewById(R.id.checkbox); } } //2 让 复选框 默认为 没有选择 private void initMap() { for (int i = 0; i < data.size(); i++) { map.put(i, false); } }
}
public class MainActivity extends AppCompatActivity { private RecyclerView recycle_view; private List<String> arrayData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { recycle_view = (RecyclerView) findViewById(R.id.recycle_view); recycle_view.setLayoutManager(new LinearLayoutManager(this)); arrayData = new ArrayList<>(); for (int i = 0; i < 1010; i++) { arrayData.add("不做大哥好多年 "); } Recycle_Adapter recycle_adapter = new Recycle_Adapter(this, arrayData); recycle_view.setAdapter(recycle_adapter); } }