扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章主要介绍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
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
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
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如何实现流式标签单选多选功能”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流