Android带字母的ListView_ListView字母排序索引
2015-10-27 11:27:21 By: shinyuu
本Demo是一个基于ListView的A-Z字母排序索引的例子源代码、核心技术有汉字转换成拼音、根据拼音来排列ListView里面的数据、以及根据输入框中的值来过滤数据并更新ListView、Demo包括了一个过滤搜索功能、并且可以中英文混搜、类似于微信的联系人搜索界面、界面上有待改进、可以让美工修饰一下、功能真的很棒、希望对大家有用
initView代码
private void initViews() { //实例化汉字转拼音类 characterParser = CharacterParser.getInstance(); pinyinComparator = new PinyinComparator(); sideBar = (SideBar) findViewById(R.id.sidrbar); dialog = (TextView) findViewById(R.id.dialog); sideBar.setTextView(dialog); //设置右侧触摸监听 sideBar.setOnTouchingLetterChangedListener(new OnTouchingLetterChangedListener() { @Override public void onTouchingLetterChanged(String s) { //该字母首次出现的位置 int position = adapter.getPositionForSection(s.charAt(0)); if(position != -1){ sortListView.setSelection(position); } } }); sortListView = (ListView) findViewById(R.id.country_lvcountry); sortListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //这里要利用adapter.getItem(position)来获取当前position所对应的对象 Toast.makeText(getApplication(), ((SortModel)adapter.getItem(position)).getName(), Toast.LENGTH_SHORT).show(); } }); SourceDateList = filledData(getResources().getStringArray(R.array.date)); // 根据a-z进行排序源数据 Collections.sort(SourceDateList, pinyinComparator); adapter = new SortAdapter(this, SourceDateList); sortListView.setAdapter(adapter); mClearEditText = (ClearEditText) findViewById(R.id.filter_edit); //根据输入框输入值的改变来过滤搜索 mClearEditText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { //当输入框里面的值为空,更新为原来的列表,否则为过滤数据列表 filterData(s.toString()); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } }); }
为ListView填充数据
private List<SortModel> filledData(String [] date){ List<SortModel> mSortList = new ArrayList<SortModel>(); for(int i=0; i<date.length; i ){ SortModel sortModel = new SortModel(); sortModel.setName(date[i]); //汉字转换成拼音 String pinyin = characterParser.getSelling(date[i]); String sortString = pinyin.substring(0, 1).toUpperCase(); // 正则表达式,判断首字母是否是英文字母 if(sortString.matches("[A-Z]")){ sortModel.setSortLetters(sortString.toUpperCase()); }else{ sortModel.setSortLetters("#"); } mSortList.add(sortModel); } return mSortList; }
根据输入框中的值来过滤数据并更新ListView
private void filterData(String filterStr){ List<SortModel> filterDateList = new ArrayList<SortModel>(); if(TextUtils.isEmpty(filterStr)){ filterDateList = SourceDateList; }else{ filterDateList.clear(); for(SortModel sortModel : SourceDateList){ String name = sortModel.getName(); if(name.indexOf(filterStr.toString()) != -1 || characterParser.getSelling(name).startsWith(filterStr.toString())){ filterDateList.add(sortModel); } } } // 根据a-z进行排序 Collections.sort(filterDateList, pinyinComparator); adapter.updateListView(filterDateList); }
最后给贴上Demo的源代码、希望对大家有用、有兴趣的哥们可以下载看看
源代码下载链接: http://dwtedx.com/download.html?bdkey=s/1pJ8DYFx 密码: vm1e
若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力
想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)
或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)
如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教
为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)
感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛