Android带字母的ListView_ListView字母排序索引
2015-10-27 11:27:21  By: shinyuu

本Demo是一个基于ListView的A-Z字母排序索引的例子源代码、核心技术有汉字转换成拼音、根据拼音来排列ListView里面的数据、以及根据输入框中的值来过滤数据并更新ListView、Demo包括了一个过滤搜索功能、并且可以中英文混搜、类似于微信的联系人搜索界面、界面上有待改进、可以让美工修饰一下、功能真的很棒、希望对大家有用

listview字母排序


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的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+