【问题标题】:Alphabet Indexed ListView Without a cursor没有光标的字母索引列表视图
【发布时间】:2012-08-09 12:31:36
【问题描述】:

我使用 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/ 。我的意思是那些部分。我发现的所有教程都说您需要使用游标获取信息。我的问题是如果我不能在没有游标的情况下执行此操作,因为将它们存储在本地数据库中也会浪费内存。

【问题讨论】:

  • 嗨,我认为最好的方法是从服务器本身获取排序后的数据。与手持设备相比,服务器具有更强的计算能力。这将加快您的进程,也将避免使用光标。
  • 这个链接可能会给你一些想法..stackoverflow.com/questions/7051785/…
  • 是的,我知道如何订购。我不知道如何实现索引部分。正是它使滚动条弹出您部分的第一个字母。

标签: android json listview indexed alphabetical-sort


【解决方案1】:

您可能需要解析 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是尝试在服务器端对数据进行排序,因为手机内存有限,可能会让你的应用程序耗时显示数据,但你不会服务器端存在内存限制问题。

【讨论】:

  • 我可以对服务器中的数据进行排序,但我想实现字母索引部分。当我滚动弹出第一个字母时。那是我的问题。
  • 好的,您是否按照我建议的方式在客户端对它们进行了排序?
  • 还没有,我收到服务器排序的信息,这里也不需要排序。
  • 服务器端和客户端的排序指令是相同的。因此,我认为您可以按照代码进行,并决定在哪一侧进行排序。祝你好运!
  • 好的,谢谢。但这不是我的问题。你看,我希望我的列表视图看起来像这样 eshyu.wordpress.com/2010/08/15/… 。我的意思是那些部分。我发现的所有教程都说您需要使用游标获取信息。我的问题是如果我不能在没有游标的情况下执行此操作,因为将它们存储在本地数据库中也会浪费内存。
【解决方案2】:

使用比较器对数组列表进行排序,如here 所述。然后使用 ArrayAdapter 在 Listview 中显示项目

【讨论】:

    猜你喜欢
    • 2019-04-25
    • 1970-01-01
    • 2017-12-16
    • 2018-10-10
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    相关资源
    最近更新 更多