百科.dev
全部条目在线工具AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
I

IndexableRecyclerView

> 编程语言
开源

一个具有可索引、粘合等众多功能的 RecyclerView。

1.3K stars0 点赞0 次浏览
访问官网GitHub

工具介绍

一个具有可索引、粘合等众多功能的 RecyclerView。

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.3.0

  • 多音字借助TinyPinyin处理
  • 可以自定义排序方式

1.2.4

  • Fix 数据变动时,StickTitle不及时更新问题;增加2处安全校验

1.2.0

  • 支持GridLayoutManager! (感谢guodongAndroid)

1.0.7

  • 默认不再显示左侧的悬浮气泡
  • 默认排序方式改为快速排序,提供一个MODE_NONE的排序方式

1.0.5 为HeaderView/FooterView添加:

  • indexableLayout.removeHeaderAdapter();
  • headerAdapter.addData()
  • headerAdapter.removeData()

如何使用

gradle

项目下app的build.gradle中依赖:

xml
 compile 'me.yokeyword:indexablerecyclerview:1.3.0'
 compile 'com.android.support:appcompat-v7:你使用的版本号'
 compile 'com.android.support:recyclerview-v7:你使用的版本号'

Xml

xml
             // IndexBar:text lineSpace

3步集成

1、实体类实现IndexableEntity

java
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

java
public class CityAdapter extends IndexableAdapter {
    @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、绑定视图和数据

java
// 支持LinearLayoutManager, GridLayoutManager
indexableLayout.setLayoutManager(LayoutManager);

CityAdapter adapter = new CityAdapter(this);
indexableLayout.setAdapter(adapter);
// 排序过程是异步的 另有setDatas(mDatas,IndexCallback callback)  // callback在datas异步排序结束后回调
adapter.setDatas(mDatas);
// 另有setOnItemTitleClickListener(listener),点击TitleItem点击事件以及LongClick
adapter.setOnItemContentClickListener(listener);

拓展

1、设置 索引悬浮提示框 风格

java
// 前者Material Design风格右侧气泡 , 后者 居中 IOS风格气泡
indexableLayout.setOverlayStyle_MaterialDesign(int Color) & setOverlayStyle_Center()

2、多音字处理

多音字处理得益于使用了TinyPinyin,可以如下设置:

java
// 添加中文城市词典
Pinyin.init(Pinyin.newConfig().with(CnCityDict.getInstance());

// 添加自定义词典
Pinyin.init(Pinyin.newConfig()
            .with(new PinyinMapDict() {
                @Override
                public Map mapping() {
                    HashMap map = new HashMap();
                    map.put("重庆",  new String[]{"CHONG", "QING"});
                    return map;
                }
            }));

3、添加自定义HeaderView,FooterView

…

`

4、更改排序规则

默认根据全拼音排序,可根据需求更改为按首字母排序:

java
// 设置排序规则: 
// MODE_FAST:按首字母排序(默认);MODE_ALL_LETTERS:全字母比较,效率较低; MODE_NONE:字母模块内不排序,效率最高
indexableLayout.setCompareMode(@CompareMode int mode);

// 自定义排序规则
indexableLayout.setComparator(yourComparator);

更多细节使用,参见Demo

致谢

TinyPinyin

Issues· 0 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

Java

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月17日
分类编程语言
定价开源

> 相关工具

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言