1. 程式人生 > >Android ListView 按字母排序要求每個拼音內部子類按字母在上,漢字在下再排序

Android ListView 按字母排序要求每個拼音內部子類按字母在上,漢字在下再排序

最近碰到個需求,要求對已經按字母排完序的ListView,再按照漢字字母進行二級排序,下面是一種思路,

jmd_sbook = new ArrayList<>();
jmd_sbook_m = new ArrayList<>();
jmd_sbook_l = new ArrayList<>();
jmd_sbook_n = new ArrayList<>();
//遍歷資料來源,拿到關鍵字的第一位判定是字母數字還是漢字
for (int i = 0; i < datas.size(); i++) {
    boolean isSpecial = false
; String name = datas.get(i).getItemTitle().toString(); String text = name.substring(0, 1); Pattern p = Pattern.compile("[a-zA-Z]"); Matcher m = p.matcher(text); if (m.matches()) { isSpecial = true; jmd_sbook_l.add(datas.get(i)); } p = Pattern.compile("[\u4e00-\u9fa5]"); m = p.matcher(text);
if (m.matches()) { isSpecial = true; jmd_sbook_m.add(datas.get(i)); } if (!isSpecial) { jmd_sbook_n.add(datas.get(i)); } } //這裡是投機取巧的方法,要求漢字必須在字母的上面,所以要先合併都為漢字的那一組 jmd_sbook.addAll(jmd_sbook_l); jmd_sbook.addAll(jmd_sbook_m); jmd_sbook.addAll(jmd_sbook_n); //拿到完整的陣列以後,我們下面要進行字母排序,排序的方法網上都有,大家可以搜一搜
Collections.sort(jmd_sbook, new PinyinComparator()); mAdapter.setDatas(jmd_sbook); mListView.setAdapter(mAdapter);