使用场景
对于联系人,城市列表等,按照字母排序的都常用到
---------------------------------------------------------------------------------
Demo下载
---------------------------------------------------------------------------------
需求分析
一般需要的基本功能为
1. 所有数据按照关键字段,一般是name姓名,进行拼音字母排序
2. 每个拼音的首字母第一次出现的位置,额外显示个字母栏header,如图片中顶部的M和下面的N
3. 右侧有一个字母导航栏,从A~Z排序,有两种
1) 显示所有字母,如图1
2) 只显示列表中全部数据有的首字母,如图2
4. 选中字母导航栏时(DOWN按下,和MOVE按下后移动)则会让列表跳转到该字母首次出现的位置,如图1的M
通常还会同时在屏幕居中位置显示一个提示框,提醒当前选择的字母
注意: 如果是上面3中的1)情况,则可能出现选择了某字母,但是列表中没有该数据,则只显示提示框,不作列表跳转
图1
图2
---------------------------------------------------------------------------------
首字母数据来源
1.服务器返回
条件允许的情况下,尽量让服务器直接提供该字段,最好同时提供name对应的拼音和大写首字母,至少也要提供拼音
2.客户端解析
服务器不提供只能本地解析了,如利用pinyin4j等第三方工具将中文转为拼音字母
服务器处理的好处是,只要处理一次再保存到数据库中即可,而客户端需要每次获取数据的时候都转一遍比较慢
---------------------------------------------------------------------------------
数据排序
1.服务器排序
服务器在获取数据时按照关键字段的拼音进行排序,返回给终端
2.本地排序
服务器不提供的情况下,或者本地进行数据修改后造成排序集合混乱的情况下,则需要客户端进行再次排序
排序方法如下
利用Collections.sort排序方法,第一个为需要排序的数据List集合,第二个为比较器,提供排序规则
在compare方法中处理规则,两个参数分别是需要对比的俩数据,
这里我们可以让他们的拼音字段进行compareTo比较,String类型的拼音会自动按照字母升序排列
注意: 如果服务器只返回中文,需要转为拼音后排序
---------------------------------------------------------------------------------
列表首字母第一次出现位置的处理逻辑
前提是数据已经按照字母顺序排好了,如果是乱序那首字母第一次出现的位置就没有意义了
通常会用一个Map键值对集合保存数据
key为String类型,对应首字母
value为Integer型,对应字母首次出现的位置索引
处理方法
方式1. 循环数据集合,如果map中没有这个key首字母,就保存首字母和此时的index
之后再获取到数据首字母是集合中存在时,就代表不是第一次存在,就不作做put操作了
对于联系人,城市列表等,按照字母排序的都常用到
---------------------------------------------------------------------------------
Demo下载
网盘链接
链接: http://pan.baidu.com/s/1jGpNLAI 密码: zeay
---------------------------------------------------------------------------------
需求分析
一般需要的基本功能为
1. 所有数据按照关键字段,一般是name姓名,进行拼音字母排序
2. 每个拼音的首字母第一次出现的位置,额外显示个字母栏header,如图片中顶部的M和下面的N
3. 右侧有一个字母导航栏,从A~Z排序,有两种
1) 显示所有字母,如图1
2) 只显示列表中全部数据有的首字母,如图2
4. 选中字母导航栏时(DOWN按下,和MOVE按下后移动)则会让列表跳转到该字母首次出现的位置,如图1的M
通常还会同时在屏幕居中位置显示一个提示框,提醒当前选择的字母
注意: 如果是上面3中的1)情况,则可能出现选择了某字母,但是列表中没有该数据,则只显示提示框,不作列表跳转
图1
图2
---------------------------------------------------------------------------------
首字母数据来源
1.服务器返回
条件允许的情况下,尽量让服务器直接提供该字段,最好同时提供name对应的拼音和大写首字母,至少也要提供拼音
2.客户端解析
服务器不提供只能本地解析了,如利用pinyin4j等第三方工具将中文转为拼音字母
服务器处理的好处是,只要处理一次再保存到数据库中即可,而客户端需要每次获取数据的时候都转一遍比较慢
---------------------------------------------------------------------------------
数据排序
1.服务器排序
服务器在获取数据时按照关键字段的拼音进行排序,返回给终端
2.本地排序
服务器不提供的情况下,或者本地进行数据修改后造成排序集合混乱的情况下,则需要客户端进行再次排序
排序方法如下
利用Collections.sort排序方法,第一个为需要排序的数据List集合,第二个为比较器,提供排序规则
在compare方法中处理规则,两个参数分别是需要对比的俩数据,
这里我们可以让他们的拼音字段进行compareTo比较,String类型的拼音会自动按照字母升序排列
注意: 如果服务器只返回中文,需要转为拼音后排序
---------------------------------------------------------------------------------
列表首字母第一次出现位置的处理逻辑
前提是数据已经按照字母顺序排好了,如果是乱序那首字母第一次出现的位置就没有意义了
通常会用一个Map键值对集合保存数据
key为String类型,对应首字母
value为Integer型,对应字母首次出现的位置索引
处理方法
方式1. 循环数据集合,如果map中没有这个key首字母,就保存首字母和此时的index
之后再获取到数据首字母是集合中存在时,就代表不是第一次存在,就不作做put操作了