网上的这种demo太多太多了,但是他们只能实现基本的A-Z排序,也就是仅仅是首字母排序,涉及到一些特别人名字排序的时候相同姓氏会被分开,这也是由于他是按照把中文汉字全部转化为汉语拼音后进行一一比较而造成的结果,给一张图就很明了了
是不是发现姓李中间出现了姓刘的情况?这是因为 李四光的拼音是lisiguang 而刘德华呢是liudehua,李小龙是lixiaolong,
这样应该很清楚了吧,这种排序显然达不到我们实际的效果
我在这里帖上关键的代码吧,其他的网上也都 有就不多BB了
import java.text.Collator;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.Comparator;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.text.Editable;import android.text.TextUtils;import android.text.TextWatcher;import android.view.View;import android.view.ViewGroup.MarginLayoutParams;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.SectionIndexer;import android.widget.TextView;import android.widget.Toast;import com.example.sortlistview.SideBar.OnTouchingLetterChangedListener;public class ActivityAddFriends extends Activity implements SectionIndexer { private ListView sortListView; private SideBar sideBar; private TextView dialog; private SortGroupMemberAdapter adapter; private ClearEditText mClearEditText; private LinearLayout titleLayout; private TextView title; private TextView tvNofriends; /** * 上次第一个可见元素,用于滚动时记录标识。 */ private int lastFirstVisibleItem = -1; /** * 汉字转换成拼音的类 */ private CharacterParser characterParser; private List SourceDateList; private List SourceDateListTwo = new ArrayList (); /** * 根据拼音来排列ListView里面的数据类 */ private PinyinComparator pinyinComparator; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_friends); initViews(); // System.out.println("qqqqqqq==");// String[] newArray = getResources().getStringArray(R.array.date) ; // Comparator
这里面主要代码是这块:
String[] newArray = getResources().getStringArray(R.array.date) ; Comparator com = Collator.getInstance(java.util.Locale.CHINA); List list = Arrays.asList(newArray); Collections.sort(list, com); // for(String i:list){ // } SourceDateListTwo = filledDataTwo(list) ; SourceDateList = filledData(SourceDateListTwo) ;复制代码
"date"就是数据,我这里是测试的死的数据 ,改成从服务器获取的数据就行了
先将中文进行排序再按首字母进行排序就行了。