千家信息网

RecyclerView如何实现流式标签单选多选功能

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍RecyclerView如何实现流式标签单选多选功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!RecyclerView简介RecyclerView是Andr
千家信息网最后更新 2026年11月01日RecyclerView如何实现流式标签单选多选功能

这篇文章主要介绍RecyclerView如何实现流式标签单选多选功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

RecyclerView简介

RecyclerView是Android一个更强大的控件,其不仅可以实现和ListView同样的效果,还有优化了ListView中的各种不足。其可以实现数据纵向滚动,也可以实现横向滚动(ListView做不到横向滚动)。接下来讲解RecyclerView的用法。

RecyclerView 基本用法

因为RecyclerView属于新增的控件,Android将RecyclerView定义在support库里。若要使用RecyclerView,第一步是要在build.gradle中添加对应的依赖库。

前期准备

依赖的添加:

//瀑布流LayoutManager implementation 'com.google.android:flexbox:1.0.0' //RecyclerView implementation 'com.android.support:design:28.0.0'

使用方法

3.1、多选的实现

1、使用集合存储需要存储或者展示的数据

public static Set positionSet = new HashSet<>(); //用于存储选择的位置 private boolean selectMode = true; //选择模式 多选或者单选 true 多选 public Set checkTYpeNameSet = new HashSet<>(); //用于存储选择项的名称

2、实现流式布局的布局管理器

mRecyclerView = (RecyclerView) findViewById(R.id.recycler); FlexboxLayoutManager manager = new FlexboxLayoutManager(this, FlexDirection.ROW, FlexWrap.WRAP){ @Override public boolean canScrollVertically() { return false; } }; mRecyclerView.setLayoutManager(manager);

3、单条点击事件的处理

mAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void OnItemClick(View view, int position) { addOrRemove(position); } @Override public void OnItemLongClick(View view, int position) { } }); private void addOrRemove(int position) { if (positionSet.contains(position)) { // 如果包含,则撤销选择 positionSet.remove(position); checkTYpeNameSet.remove(mListData.get(position).getTagName()); } else { // 如果不包含,则添加 positionSet.add(position); checkTYpeNameSet.add(mListData.get(position).getTagName()); } if (positionSet.size() == 0) { // 如果没有选中任何的item,则退出多选模式 mAdapter.notifyDataSetChanged(); selectMode = false; } else { // 更新列表界面,否则无法显示已选的item mAdapter.notifyDataSetChanged(); } Log.e("info",positionSet.toString()); Toast.makeText(MultipleChoiceActivity.this,checkTYpeNameSet.toString(),Toast.LENGTH_SHORT).show(); }

4、适配的写法

public class MultipleRecyclerAdapter extends RecyclerView.Adapter { private Context mContext; private List mListData = new ArrayList<>(); private OnItemClickListener mOnItemClickListener; public void setOnItemClickListener(OnItemClickListener mOnItemClickListener) { this.mOnItemClickListener = mOnItemClickListener; } public MultipleRecyclerAdapter(Context mContext, List mListData) { // mListData = new ArrayList<>(); this.mContext = mContext; this.mListData = mListData; } public void update(List list){ if(list != null && list.size() > 0){ mListData.addAll(list); notifyDataSetChanged(); } } class ViewHolder extends RecyclerView.ViewHolder{ TextView typeTv; CheckableLayout rootLayout; public ViewHolder(@NonNull View itemView) { super(itemView); typeTv = (TextView) itemView.findViewById(R.id.alive_type_tv); rootLayout = (CheckableLayout) itemView.findViewById(R.id.root_layout); } } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { if(mContext == null){ mContext = viewGroup.getContext(); } View view = LayoutInflater.from(mContext).inflate(R.layout.item_recycler,viewGroup,false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull final ViewHolder holder, int position) { Set positionSet = MultipleChoiceActivity.positionSet; //检查set里是否包含position,包含则显示选中的背景色,不包含则反之 if (positionSet.contains(position)) { holder.rootLayout.setChecked(true); holder.typeTv.setTextColor(mContext.getResources().getColor(R.color.white)); } else { holder.rootLayout.setChecked(false); holder.typeTv.setTextColor(mContext.getResources().getColor(R.color.grey_60)); } TestBean bean = mListData.get(position); holder.typeTv.setText(bean.getTagName()); if(mOnItemClickListener != null) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int pos = holder.getLayoutPosition(); mOnItemClickListener.OnItemClick(holder.itemView, pos); holder.rootLayout.setChecked(true); } }); } } @Override public int getItemCount() { return mListData != null ? mListData.size() : 0; }}

5、单条布局的XML文件

6、CheckableLayout的使用说明:

实现了Checkable接口,可用于布局的选择,设置选择的样式

public class CheckableLayout extends RelativeLayout implements Checkable { private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked}; private boolean mChecked; public CheckableLayout(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void setChecked(boolean b) { if (b != mChecked){ mChecked = b; refreshDrawableState(); } } @Override public boolean isChecked() { return mChecked; } @Override public void toggle() { setChecked(!mChecked); } @Override protected int[] onCreateDrawableState(int extraSpace) { final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); if (isChecked()) mergeDrawableStates(drawableState, CHECKED_STATE_SET); return drawableState; }}

3.2、单选的实现

单选和多选的代码几乎完全一致, 只需要修改一部分

1、去除记录选择名称的集合, 将选择模式设置为false

public static Set positionSet = new HashSet<>(); private boolean selectMode = false; //选择模式 多选或者单选 true 多选

2 、单条点击事件需要进行修改

mAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void OnItemClick(View view, int position) { if (selectMode) { // 如果当前处于多选状态,则进入多选状态的逻辑 // 维护当前已选的position addOrRemove(position); } else { // 如果不是多选状态,则进入单选事件的业务逻辑 if (!positionSet.contains(position)) { // 选择不同的单位时取消之前选中的单位 positionSet.clear(); } addOrRemove(position); } String kindName = mListData.get(position).getTagName(); Toast.makeText(SingleChoiceActivity.this, kindName, Toast.LENGTH_SHORT).show(); } @Override public void OnItemLongClick(View view, int position) { } }); private void addOrRemove(int position) { if (positionSet.contains(position)) { // 如果包含,则撤销选择 positionSet.remove(position); } else { // 如果不包含,则添加 positionSet.add(position); } if (positionSet.size() == 0) { // 如果没有选中任何的item,则退出多选模式 mAdapter.notifyDataSetChanged(); selectMode = false; } else { // 更新列表界面,否则无法显示已选的item mAdapter.notifyDataSetChanged(); } }

以上是"RecyclerView如何实现流式标签单选多选功能"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

选择 模式 布局 存储 事件 状态 功能 内容 单位 名称 控件 数据 横向 界面 篇文章 逻辑 更新 不同 强大 一致 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技官网 科技制造互联网公司 互联网女皇 腾讯科技 沃里互联网科技 上海卓越科技 互联网 北京三清互联网科技 互联网科技产品 须眉科技是互联网公司吗 剑昆互联网络科技有限公司临桂 互联网为啥属于高科技 互联网新科技动漫ppt素材 中和天地互联网科技有限公司 滨湖区互联网智能科技产品有哪些 国大互联网教育科技有限公司薪资 互联网金融科技元年 互联网第三次科技革命特征 互联网金融科技公司的优势 小米互联网科技园入驻 互联网公司属于科技吗 互联网时代高科技布局 互联网金融公司科技 银优互联网科技有限公司 四个字互联网科技公司取名 佩信高科技互联网 华中科技有哪些互联网大佬 深圳前海聚择互联网科技有限公司 深圳国际航运科技和互联网 互联网企业和科技型企业 互联网公司科技股 艺电能源互联网科技有限公司招聘
0