声明: 之前的文章写得有一些复杂,属于很早之前的文章了,最近看到,如果单选的话为啥还要用CheckBox呢
现在为你提供简单的代码,阅读即懂,复制即用:
Android 实现列表单选功能
(这是一个整个的项目, 可以下载下来,看这个类,有能力的小伙伴可以直接看以下代码逻辑,文章中基本上只是逻辑, 类似于伪代码)
- 创建适配器类, 重点关注这个selPos的变量, 使用它来记录当前单选的下标
public class SingleChoiceListAdapter extends BaseRecyclerAdapter<ExampleListBean, RecyclerViewHolder> { /** * 定义选中的下标, 默认-1 */ private int selPos = -1; public void setSelPos(int selPos) { this.selPos = selPos; } public int getSelPos() { return selPos; } public SingleChoiceListAdapter(@Nullable List<ExampleListBean> data) { super(R.layout.item_single_choice, data); } @Override protected void convert(RecyclerViewHolder holder, ExampleListBean item) { //注册子View的点击事件,必须,否则在Act点击事件不生效 holder.addOnClickListener(R.id.iv_select); ImageView ivSelect = holder.getImageView(R.id.iv_select); //因为在布局中定义了一个选中与非选中的drawable,select_list_item.xml //如果传进来的选中下标等于当前下标,就给设置选中状态 ivSelect.setSelected(selPos == holder.getAdapterPosition()); } }
- 在页面中写recyclerview的基本配置和绑定适配器
private void initSingleChoiceRecycler() { LinearLayoutManager layoutManager = new LinearLayoutManager(this); rvSingleChoice.setLayoutManager(layoutManager); singleChoiceListAdapter = new SingleChoiceListAdapter(Collections.emptyList()); rvSingleChoice.setAdapter(singleChoiceListAdapter); }
-
做适配器的点击监听,如果点击的是单选框的按钮, 就将当前点击的下标赋值给适配器的selPos, 代表当前选中的下标,然后刷新适配器, 刷新适配器会执行第1步的convert方法, 根据下标去展示不同的状态
singleChoiceListAdapter.setOnItemChildClickListener((adapter, view, position) -> { if (view.getId() == R.id.iv_select) { //点击按钮,将当前点击的下标传进去,刷新适配器 singleChoiceListAdapter.setSelPos(position); singleChoiceListAdapter.notifyDataSetChanged(); } });
-
看不懂的朋友, 可以直接去下载文章顶部链接的项目