2013-04-28 69 views
3

我已經創建了一個基於本教程列表視圖:如何在listview中對手機通訊錄進行排序?

http://www.vogella.com/articles/AndroidListView/article.html

在那個鏈接,我已經實現

13>在ListView

我的列表視圖工作選擇多個項目正確。我已經用下面的代碼手機通訊錄填充它的自定義列表視圖:

private List<Model> getModel()   
{     
    List<Model> list = new ArrayList<Model>();  
    ContentResolver cr = getContentResolver(); 
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
    if (cur.getCount() > 0) 
    { 
     while (cur.moveToNext()) 
     { 
       String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
       String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
       if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
       { 
        // This inner cursor is for contacts that have multiple numbers. 
        Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, null); 
        while (pCur.moveToNext()) 
        { 
         list.add(get(name)); 
        } 
        pCur.close(); 
       } 
     } 
    } 
    cur.close(); 
    return list; 
} 

現在越來越顯示聯繫人的姓名,但它們沒有排序。我如何分類?

請幫忙! 在此先感謝!

回答

4

讓我們來看看這個聲明。

List<Model> list = new ArrayList<Model>();  

這是一個ArrayList對象,paramaterized鍵入Model。現在,在您創建的Model類中,您可以簡單地使用Comparable接口。要做到這一點,你加:

implements Comparable<Model> 

Model類標題的末尾。

然後您將被迫添加一個名爲compareTo的方法的實現。這只是你如何比較的東西。

當您添加此實現時,您可以撥打Collections.sort(),並將其傳遞給ArrayList對象列表。這將爲您排序列表。

有一點更深入,我認爲

所以,要做的第一件事就是去你Model類,這在目前有一個頭,看起來像這樣:

public class Model 

你想要做的是改變它到:

public class Model implements Comparable<Model> 

這是什麼意思?

那麼這意味着你已經同意爲Comparable接口提供代碼。您現在需要在您的Model課程中編寫方法compareTo。喜歡的東西:

@Override 
public int compareTo(Object arg0) { 
    // At this point, you put your comparison code in. 
} 

你比較代碼

如果你想給他們按字母順序排序,你可以使用存在於String對象compareTo方法。你首先需要打開arg0String對象,您可以一起工作:

String otherName = ((Member)arg0).getName(); 

然後,你可以簡單地返回字符串compareTo方法的價值:

return otherName.compareTo(this.name); 
+0

我做到了。對於Collections.sort(列表),它表示「類型安全性:類型集合」 – Ereka 2013-04-28 12:29:00

+0

「的泛型方法排序(列表)的未檢查的調用排序(列表)。我的問題應該真的給你一步一步的指導。緊隨其後! :) – christopher 2013-04-28 12:31:24

+0

您應該實施可比較的,而不僅僅是原始類型。 – hd1 2013-04-28 12:40:57

0

在返回列表之前添加Collections.sort(list)。並檢查類模型是否實現了Comparable。如果沒有,可以使用Collections.sort(列表,比較器)

+0

我試過了。它表示「綁定不匹配:類型集合的泛型方法排序(列表)不適用於參數(列表)。推斷的類型模型不是有界替代參數>」 – Ereka 2013-04-28 12:23:01

+0

它是因爲Model沒有實現Comparable。您必須在類Model中實現接口Comparable。如果不能,使用比較器的排序方法(並創建該比較器) – Thierry 2013-04-28 12:23:47

+0

模型不會實現Comparable。我到底該如何執行? – Ereka 2013-04-28 12:24:35

相關問題