android 实现城市选择、联系人等功能的易拓展 RecyclerView 库,包含自动索引,粘性等功能
来源:互联网 发布:潜泳技巧 知乎 编辑:程序博客网 时间:2024/05/21 09:34
IndexableRecyclerView
A RecyclerView with indexable, sticky and many other features.
轻松实现:选择城市,选择联系人等需要索引的功能
替代之前的 IndexableStickyListView(移至该分支),进行大幅度重构,性能优化,更易使用的 API,更易拓展的 HeaderView/FooterView 等等! 重构历程可以看这篇文章:[设计模式]记一次开源库的重构历程
Demo 演示
特性
1、根据数据源,自动排序生成字母索引 Bar(非字母开头,索引为"#",另可自由定制),以及 HeaderTitle
2、非常自由的 添加各种 HeaderView/FooterView,包括自定义索引,HeaderTitle,各种 View 等等
3、HeaderTitle 是粘性的(Sticky)
4、UI 自由定制、拓展;提供 2 种悬浮提示 View,常规居中 以及 MD 风格的右侧气泡
5、绑定数据源,通过单线程的线程池优化,不怕重复绑定数据
6、使用TinyPinyin代替 Pinyin4j.jar 库,体积更小,拼音转化速度提升 4 倍!
更新日志
1.0.4
添加 FooterView 功能
如何使用
gradle
项目下 app 的 build.gradle 中依赖:
compile 'me.yokeyword:indexablerecyclerview:1.0.4' compile 'com.android.support:recyclerview-v7:你使用的版本号'
Xml
<me.yokeyword.indexablerv.IndexableLayout ... app:indexBar_layout_width="24dp" // IndexBar:width app:indexBar_background="#08000000" // IndexBar:background app:indexBar_textColor="#000000" // IndexBar:textColor app:indexBar_selectedTextColor="#f33737" // IndexBar:isSelected textColor app:indexBar_textSize="14sp" // IndexBar:textSize app:indexBar_textSpace="6dp" /> // IndexBar:text lineSpace
3 步集成
1、实体类实现 IndexableEntity
public class CityEntity implements IndexableEntity { ... private String name; private String pinyin; @Override public String getFieldIndexBy() { return name; // return 你需要根据该属性排序的 field } @Override public void setFieldIndexBy(String indexByField) { this.name = indexByField; // 同上 } @Override public void setFieldPinyinIndexBy(String pinyin) { this.pinyin = pinyin; // 保存排序 field 的拼音,在执行比如搜索等功能时有用 (若不需要,空实现该方法即可) }}
2、继承 IndexAdapter
public class CityAdapter extends IndexableAdapter<CityEntity> { @Override public RecyclerView.ViewHolder onCreateTitleViewHolder(ViewGroup parent) { // 创建 TitleItem 布局 } @Override public RecyclerView.ViewHolder onCreateContentViewHolder(ViewGroup parent) { // 创建 内容 Item 布局 } @Override public void onBindTitleViewHolder(RecyclerView.ViewHolder holder, String indexTitle) { // 填充 TitleItem 布局 } @Override public void onBindContentViewHolder(RecyclerView.ViewHolder holder, CityEntity entity) { // 填充 内容 Item 布局 }}
3、绑定视图和数据
CityAdapter adapter = new CityAdapter(this);indexableLayout.setAdapter(adapter);// 排序过程是异步的 另有 setDatas(mDatas,IndexCallback callback) // callback 在 datas 异步排序结束后回调adapter.setDatas(mDatas);// 另有 setOnItemTitleClickListener(listener),点击 TitleItem 点击事件以及 LongClickadapter.setOnItemContentClickListener(listener);
拓展
1、设置 索引悬浮提示框 风格
// 前者 Material Design 风格右侧气泡 , 后者 居中 IOS 风格气泡indexableLayout.setOverlayStyle_MaterialDesign(int Color) & setOverlayStyle_Center()
2、多音字处理
多音字需要手动处理: 例如城市排序时, 拼音转化库默认重庆为 zhongqing, 对于这种情况你需要手动将源数据的 '重庆' 修改 为'#chongqing#重庆', 库会根据正则表达式进行对应的辨别处理(即 #多音字拼音#汉字 的格式)
3、添加自定义 HeaderView,FooterView
indexableLayout.addHeaderAdapter(IndexableHeaderAdapter adapter) // 添加 HeaderViewindexableLayout.addFooterAdapter(IndexableFooterAdapter adapter) // 添加 FooterView// 3 个参数分别对应:IndexBar 的索引,HeaderTitle,传入的 Header 数据源,此处泛型 T 可以是任何实体类,不需要和主 Adapter 类型一致// 如果不想显示某块视图,则传入 null 即可: 比如不想显示 HeaderTitle, 则 indexTitle 传入 null;IndexableHeaderAdapter<T>(String index, String indexTitle, List<T> datas){ // 需要实现 3 个方法: public abstract int getItemViewType(); // 每个 HeaderView 的 type 应当不同 public abstract RecyclerView.ViewHolder onCreateContentViewHolder(ViewGroup parent); public abstract void onBindContentViewHolder(RecyclerView.ViewHolder holder, T entity);}// 如果想添加的 HeaderView,和主 Adapter 的布局完全一致,则可以使用:new SimpleHeaderAdapter(IndexableAdapter<T> adapter, String index, String indexTitle, List<T> datas);
4、更改排序规则
默认根据全拼音排序,可根据需求更改为按首字母排序:
// 排序规则设置为:只按首字母 (默认全拼音排序,false) 效率很高,是默认的 10 倍左右。indexableLayout.setFastCompare(true);
更多细节使用,参见 Demo
- android 实现城市选择、联系人等功能的易拓展 RecyclerView 库,包含自动索引,粘性等功能
- indexablerecyclerview 的使用体验(实现选择城市,选择联系人等需要索引的功能)
- 城市选择功能实现
- jQuery实现自动提示,分类选择等功能的搜索框
- 实现各大网站的自动登录等**功能
- Android 使用RecyclerView实现(仿微信)的联系人A-Z字母排序和过滤搜索功能
- Android Studio中快捷键实现try catch等功能包含代码块
- SnapHelper,对RecyclerView的功能拓展
- SnapHelper,对RecyclerView的功能拓展
- [Android精品源码] Android 仿美团网,探索ListView的A-Z字母排序功能实现选择城市
- Android实现下载图片,视频,APK功能等功能
- Android 仿美团网,探索ListView的A-Z字母排序功能实现选择城市
- Android 仿美团网,探索ListView的A-Z字母排序功能实现选择城市
- Android 仿美团网,探索ListView的A-Z字母排序功能实现选择城市
- Android 仿美团网,探索ListView的A-Z字母排序功能实现选择城市
- ListView实现城市快速索引功能
- 完美实现仿美团城市选择 定位功能
- 活学活用——制作创意Android生日礼物(含拼图游戏,背景音乐,自动拨号等功能实现)
- linux 怎么把^M去掉
- demoTest
- android编译产生的apk或so不安装 - LOCAL_MODULE_TAGS :=user eng tests optional
- 字符串与数组工具
- kvm 相关知识总结
- android 实现城市选择、联系人等功能的易拓展 RecyclerView 库,包含自动索引,粘性等功能
- U3D HTTP 最好用的插件BestHttp
- emacs中英文等宽对齐
- GCD Dispatch Sources
- realloc,malloc,calloc的区别
- NVIDIA JETSON TX1 开发者套件环境配置
- 抽象类
- FOF管理系列之一:什么是FOF?
- Poedu_C语言_Lesson20_20160923_分支语句