Android 聯絡人訂閱號按拼音排序
阿新 • • 發佈:2018-12-30
微信中聯絡人,訂閱號都是按拼音排序的,在按拼音排序的基礎上才能索引,雖然微信從資料庫取出的就是排好序的,我們今天就對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'
排序前後效果圖:
這裡是逆序:
按拼音排序順利完成。