
RecyclerView实现单选
创建一个List,存储选中的项目下标。 在Adapter的onBindViewHolder方法中,检查当前项目是否在选中列表中。 如果在列表中,设置为已选中状态,且不可点击。 如果不在列表中,则清空选中列表,并添加当前项目下标,更新UI状态。 选中状态管理:通过List存储选中的项目下标,确保单选功能。 点击事件处理:在点击事件中,检查当前项目是否已选中。 UI状态更新:通过notifyItemChanged方法,确保RecyclerView及Adapter及时更新选中状态。
发布日期:2021-05-08 01:16:40
浏览次数:65
分类:精选文章
本文共 2453 字,大约阅读时间需要 8 分钟。
Android单选框实现:基于RecyclerView的常用解决方案
在Android开发中,单选框是一种常见的UI组件,用于允许用户在列表中选择一个唯一的项目。以下是实现单选功能的详细步骤和核心逻辑。
一、布局结构
布局文件中,通常采用 RecyclerView 组件来实现可滚动的列表效果。每个项目的布局可以采用以下形式:
二、Adapter实现
在RecyclerView的Adapter中,需要管理选中的项目。核心逻辑包括:
代码示例
import androidx.recyclerview.widget.RecyclerView;import java.util.ArrayList;import java.util.List;public class MyAdapter extends RecyclerView.Adapter{ private List selectedIndices = new ArrayList<>(); private final List mData; public MyAdapter(List data) { mData = data; } @Override public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new MyViewHolder(LayoutInflater.inflate(R.layout.item_layout, parent)); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { DataItem item = mData.get(position); // 判断当前项目是否在选中列表中 boolean isItemSelected = selectedIndices.contains(position); holder.setItem(isItemSelected, item); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!isItemSelected) { // 未选中时,清空选中列表并添加当前项目 selectedIndices.clear(); selectedIndices.add(position); // 通知RecyclerView更新UI状态 notifyItemChanged(position); } } }); } @Override public void getItemCount() { return mData.size(); } class MyViewHolder extends RecyclerView.ViewHolder { private CheckBox mCheckBox; private DataItem mDataItem; MyViewHolder(View view) { super(view); mCheckBox = view.findViewById(R.id.checkBox); mDataItem = (DataItem) view.getTag(); } void setItem(boolean isItemSelected, DataItem item) { mCheckBox.setChecked(isItemSelected); mDataItem = item; } }}
三、核心逻辑解析
- 如果已选中,跳过操作。
- 如果未选中,清空选中列表并添加当前项目下标,更新UI状态。
四、实现效果
- 只能选择一个项目。
- 点击其他项目时,自动取消当前选中。
- 支持多个项目的点击响应。
通过以上实现,可以轻松在RecyclerView中实现单选功能,提升用户体验和代码可维护性。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月02日 21时40分54秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
上周热点回顾(1.23-1.29)
2019-03-06
上周热点回顾(3.20-3.26)
2019-03-06
上周热点回顾(6.19-6.25)
2019-03-06
云计算之路-阿里云上:docker swarm 集群故障与异常
2019-03-06
上周热点回顾(2.19-2.25)
2019-03-06
云计算之路-阿里云上:博客web服务器轮番CPU 100%
2019-03-06
云计算之路-阿里云上:服务器CPU 100%问题是memcached连接数限制引起的
2019-03-06
上周热点回顾(3.26-4.1)
2019-03-06
上周热点回顾(6.25-7.1)
2019-03-06
【故障公告】10:30-10:45 左右 docker swarm 集群节点问题引发故障
2019-03-06
工作半年的思考
2019-03-06
不可思议的纯 CSS 滚动进度条效果
2019-03-06
【CSS进阶】伪元素的妙用--单标签之美
2019-03-06
惊闻NBC在奥运后放弃使用Silverlight
2019-03-06
IE下尚未实现错误的原因
2019-03-06
创建自己的Docker基础镜像
2019-03-06
Python 简明教程 --- 20,Python 类中的属性与方法
2019-03-06
KNN 算法-理论篇-如何给电影进行分类
2019-03-06
Spring Cloud第九篇 | 分布式服务跟踪Sleuth
2019-03-06