我有一个获取Facebook好友的列表视图,我想按字母顺序对名称进行排序,但我不太清楚如何继续这样做。
以下是代码:
@Override
public void onComplete(List<Profile> friends) {
// populate list
List<String> values = new ArrayList<String>();
for (Profile profile : friends) {
//profile.getInstalled();
values.add(profile.getName());
}
ArrayAdapter<String> friendsListAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.list_items2, values);
mFriendsList.setAdapter(friendsListAdapter);
}
};
我已经四处寻找解决方案,但没找到arraydapter。
答案 0 :(得分:11)
您可以使用ArrayAdapter.sort
friendsListAdapter.sort(new Comparator<String>() {
@Override
public int compare(String lhs, String rhs) {
return lhs.compareTo(rhs);
}
});
答案 1 :(得分:9)
你需要创建一个比较器,为你排序。
public class MyComparator implements Comparator<Profile> {
@Override
public int compare(Profile p1, Profile p2) {
return p1.getName().compareTo(p2.getName());
}
}
然后你只需要做
Collections.sort(values, new MyComparator());
或者只是你可以创建一个匿名类
Collections.sort(values, new Comparator<Profile>(){
public int compare(Profile p1, Profile p2) {
return p1.getName().compareTo(p2.getName());
}
});
答案 2 :(得分:2)
由于您想要对字符串的简单arraylist进行排序,只需执行
Collections.sort(values)
在将列表传递到ArrayAdapter之前。 当项目在ListView中呈现时,它应该已经显示了排序结果。
*附加说明: 如果您希望对对象进行复杂的排序,可以通过将Comparator的实现作为Collections.sort()的第二个参数传递来使用自定义排序
答案 3 :(得分:1)
使用Comparator
。在那里,您可以定义要比较的内容以及如何在compare()
方法中定义从两个实例返回的内容。以下是String
Comparator
的示例。
new Comparator<String>() {
public int compare(final String user1, final String user2) {
// This would return the ASCII representation of the first character of each string
return (int) user2.charAt(0) - (int) user1.charAt(0);
};
};
一旦定义,您只需通过ListView
方法将其分配到.sort()
即可。如果您使用自定义布局,并使用自定义Class
,那么您将收到compare()
个参数,所以上面只是一个示例到两个String
s的简单布局。将它添加到您正在使用的布局中,它将被排序。