3

我根据本教程创建了一个列表视图:

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

2 回答 2

4

让我们看看这个声明。

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

这是一个ArrayList对象,参数化为 type Model。现在,在Model您创建的类中,您可以简单地使用Comparable接口。为此,您添加:

implements Comparable<Model>

到您的Model班级标题的末尾。

然后你将被迫为一个名为compareTo. 这只是您比较事物的方式。

添加此实现后,您可以调用Collections.sort()并将ArrayList对象列表传递给它。这将为您排序列表。

更深入一点我认为

所以,要做的第一件事就是去你的Model班级,目前有一个看起来像这样的标题:

public class Model

您想要做的就是将其更改为:

public class Model implements Comparable<Model>

这是什么意思?

那么这意味着你已经同意为Comparable接口提供代码。您现在需要compareTo在您的Model类中编写一个方法 , 。就像是:

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

您的比较代码

如果要按字母顺序对它们进行排序,可以使用对象compareTo中存在的方法String。首先,您需要arg0变成一个String可以使用的对象:

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

然后您可以简单地返回 StringcompareTo方法的值:

return otherName.compareTo(this.name);
于 2013-04-28T12:23:11.597 回答
0

在返回列表之前添加 Collections.sort(list)。并检查类 Model 是否实现了 Comparable。如果没有,您可以使用 Collections.sort(list,comarator)

于 2013-04-28T12:21:50.483 回答