微信中联系人,订阅号都是按拼音排序的,在按拼音排序的基础上才能索引,虽然微信从数据库取出的就是排好序的,我们今天就对List里的无序数据进行排序。
首先定义一个联系人类Contact:
/**
* Created by dhl on 2017/5/10.
*/
public class Contact {
private String name ;
private String py ;
public Contact(String name ,String py)
{
this.name = name ;
this.py = py ;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPy() {
return py;
}
public void setPy(String py) {
this.py = py;
}
}
这里就两个字段,一个Name一个简拼Py。
这里先逆序造一些数据:
Contact contact = null;
//倒叙abcd测试
for (char i = 'z'; i >='a' ; i--) {
contact = new Contact("张三"+i,i+"");
contactList.add(contact);
}
这里的顺序是逆序,重点来了,我们要实现一个Comparator接口来排序:
/**
* 实现Comparator接口
*/
class ContactComparator implements Comparator<Contact>
{
@Override
public int compare(Contact o1, Contact o2) {
return o1.getPy().compareTo(o2.getPy());
}
}
然后
Collections.sort(contactList,new ContactComparator());
这样contactList的顺序就是正序。
下面贴出全部代码:
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.dhl.objectsort.MainActivity">
<ListView
android:id="@+id/list_contact"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</LinearLayout>
MainActivity:
public class MainActivity extends AppCompatActivity {
private List<Contact> contactList ;
private ListView listView ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView)findViewById(R.id.list_contact);
initData();
listView.setAdapter(new CommonAdapter<Contact>(this,R.layout.contact_item,contactList) {
@Override
protected void convert(ViewHolder viewHolder, Contact item, int position) {
viewHolder.setText(R.id.contact_text,item.getName()+"\n"+item.getPy());
}
});
}
private void initData()
{
contactList = new ArrayList<>();
Contact contact = null;
//倒叙abcd测试
for (char i = 'z'; i >='a' ; i--) {
contact = new Contact("张三"+i,i+"");
contactList.add(contact);
}
Collections.sort(contactList,new ContactComparator());
}
/**
* 实现Comparator接口
*/
class ContactComparator implements Comparator<Contact>
{
@Override
public int compare(Contact o1, Contact o2) {
return o1.getPy().compareTo(o2.getPy());
}
}
}
这里的通用Adapter依赖:
compile 'com.zhy:base-adapter:3.0.3'
排序前后效果图:
这里是逆序:
按拼音排序顺利完成。