如何在listview中对手机通讯录进行排序?

问题描述:

我已经创建了一个基于本教程列表视图:如何在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; 
} 

现在越来越显示联系人的姓名,但它们没有排序。我如何分类?

请帮忙! 在此先感谢!

让我们来看看这个声明。

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

在返回列表之前添加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