Listview按字母顺序排列

时间:2014-04-12 17:58:51

标签: android facebook listview

我有一个获取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。

4 个答案:

答案 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的简单布局。将它添加到您正在使用的布局中,它将被排序。

相关问题