我使用 JSON 从服务器接收数据,我想使用字母索引部分按字母顺序对它们进行排序并将它们存储在 ListView 中。也许会发生以下情况:
for(int i=0;i<jArray.length();i++){
// here
}
我读到您只能使用光标对这样的元素进行排序。在我的情况下,将来自服务器的元素存储在数据库中并再次读取它们的效率非常低。浪费时间和记忆。
所以,我问你是否有任何解决方案可以解决我的问题:使用从JSON接收的字母索引部分字符串按字母顺序排序。
编辑:我希望我的列表视图看起来像这样 http://eshyu.wordpress.com/2010/08/15/cursoradapter-with-alphabet-indexed-section-headers/。我的意思是那些部分.我找到的所有教程都说你需要用光标获取信息。我的问题是我是否可以在没有游标的情况下执行此操作,因为将它们存储在本地数据库中也会浪费内存。
您可能需要解析 JSON 数组:
List<Project> list = new ArrayList<Project>();
for (int i = 0; i < jArray.length(); i++) {
JSONObject obj = (JSONObject) jArray.get(i);
project = new Project();
project.setId( Long.parseLong(obj.get("id").toString()));
project.setKey(obj.get("key").toString());
project.setName(obj.get("name").toString());
list.add(project);
}
你可以像这样使用比较器类对它们进行排序:
Collections.sort(list), new Comparator<Project>() {
public int compare(Project p1, Project p2) {
return p1.getKey().compareToIgnoreCase(p2.getKey());
}
});
您还可以Project
类和implements
可比:
public class Project implements Comparable<Project> {
private long id;
private String key;
private String name;
public int compareTo(Project p) {
if (this.key > p.key)
return -1;
else if (this.key < p.key)
return 1;
return 0;
}
}
然后按Collections.sort(list);
对列表进行排序
My suggestion
尝试在服务器端对数据进行排序,因为手机的内存有限,可能会使您的应用程序耗时显示数据,但您在服务器端没有内存限制问题。
使用比较器对数组列表进行排序,如此处所述。然后使用 ArrayAdapter 在列表视图中显示项目