Android(安卓)选择城市,选择联系人,自定义内容等需要索引的功能
16lz
2021-01-25
gradle
项目下app的build.gradle中依赖:
compile 'me.yokeyword:indexablerecyclerview:1.3.0' compile 'com.android.support:appcompat-v7:你使用的版本号' compile 'com.android.support:recyclerview-v7:你使用的版本号'
Xml
// 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 { private LayoutInflater mInflater; public CityAdapter(Context context) { mInflater = LayoutInflater.from(context); } @Override public RecyclerView.ViewHolder onCreateTitleViewHolder(ViewGroup parent) { View view = mInflater.inflate(R.layout.recycler_view_item_city_title, parent, false); return new IndexVH(view); } @Override public RecyclerView.ViewHolder onCreateContentViewHolder(ViewGroup parent) { View view = mInflater.inflate(R.layout.recycler_view_item_city, parent, false); return new ContentVH(view); } @Override public void onBindTitleViewHolder(RecyclerView.ViewHolder holder, String indexTitle) { IndexVH vh = (IndexVH) holder; vh.tv.setText(indexTitle); } @Override public void onBindContentViewHolder(RecyclerView.ViewHolder holder, CityEntity entity) { ContentVH vh = (ContentVH) holder; vh.tv.setText(entity.getFieldIndexBy()); } private class IndexVH extends RecyclerView.ViewHolder { TextView tv; public IndexVH(View itemView) { super(itemView); tv = (TextView) itemView.findViewById(R.id.tv_item); } } private class ContentVH extends RecyclerView.ViewHolder { TextView tv; public ContentVH(View itemView) { super(itemView); tv = (TextView) itemView.findViewById(R.id.tv_name); } }
3、绑定视图和数据
// 支持LinearLayoutManager, GridLayoutManagerindexableLayout.setLayoutManager(LayoutManager);CityAdapter adapter = new CityAdapter(this);indexableLayout.setAdapter(adapter);// 排序过程是异步的 另有setDatas(mDatas,IndexCallback callback) // callback在datas异步排序结束后回调adapter.setDatas(mDatas);// 另有setOnItemTitleClickListener(listener),点击TitleItem点击事件以及LongClickadapter.setOnItemContentClickListener(listener);
更多相关文章
- Android新架构组件之Navigation
- ListActivity的使用
- Android(安卓)绑定远程服务出现 Not Allowed to bind service
- 升级SDK后,出现这个:This Android(安卓)SDK requires Android(安卓
- Android(安卓)四大组件 - 进程的 fork 创建过程
- Android开发应用异步检查更新代码
- Android(安卓)GridView宫格视图(一) 运用--BaseAdapter
- Android(安卓)Camera2 Opengles2.0 图像实时滤镜 显示 视频编码
- Android(安卓)前沿UI