仿Android联系人SideBar排序,根据拼音A-Z字母快速导航联系人姓名

【仿Android联系人SideBar排序,根据拼音A-Z字母快速导航联系人姓名】话不多说 , 直接上干货 , 图片如下:

仿Android联系人SideBar排序,根据拼音A-Z字母快速导航联系人姓名

文章插图
仿联系人排序 , 通过获取手机中的联系人 , 并根据拼音A-Z字母快速导航联系人的位置 , 以及输入搜索条件过滤 , 显示姓名的文字图片 。
这样的效果相信大家并不陌生 , 我们在APP中都司空见惯了 , 比如在选择地址的时候 , 选择国家 , 省份等等 。这样的效果很多大神也都写过相应的博客 , 大体上实现的方式都差不多 , 今天我也给大家模仿一下联系人的排序实现 。
1.首先我们把这几个工具类拷贝到自己的项目中 , 这些都是很常见的类:
–这是用来把中文转成拼音的工具类
–拼音首字母的比较器
–右侧的竖条,显示的是二十六个字母以及* , 和#号
–放排序name和key的bean
2.加上一个来实现带删除当前输入内容按钮
在中输入内容 , 然后监听它的来实现搜索条件的过滤 , 具体代码见最下面的源码:
仿Android联系人SideBar排序,根据拼音A-Z字母快速导航联系人姓名

文章插图
3.接下来我们来看看实现这个效果改如何布局 , 看一下我们的布局文件:

4.然后我们就可以在代码中调用了 , 具体的代码如下:
/*** @Description:联系人显示界面* @author http://blog.csdn.net/finddreams*/public class MainActivity extends Activity {private View mBaseView;private ListView sortListView;private SideBar sideBar;private TextView dialog;private SortAdapter adapter;private ClearEditText mClearEditText;private Map callRecords;private CharacterParser characterParser;private List SourceDateList;private PinyinComparator pinyinComparator;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_main_contact);initView();initData();}private void initView() {sideBar = (SideBar) this.findViewById(R.id.sidrbar);dialog = (TextView) this.findViewById(R.id.dialog);sortListView = (ListView) this.findViewById(R.id.sortlist);}private void initData() {// 实例化汉字转拼音类characterParser = CharacterParser.getInstance();pinyinComparator = new PinyinComparator();sideBar.setTextView(dialog);// 设置右侧触摸监听sideBar.setOnTouchingLetterChangedListener(new OnTouchingLetterChangedListener() {@SuppressLint("NewApi")@Overridepublic void onTouchingLetterChanged(String s) {// 该字母首次出现的位置int position = adapter.getPositionForSection(s.charAt(0));if (position != -1) {sortListView.setSelection(position);}}});sortListView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView