0

我有一个ListView由三 (3) 个填充ArrayList的:

items,ratingscomments

但是,我需要通过忽略前导“the”来对项目进行排序。我已经通过重新排列items ArrayList使用 a Collections.sort(见下面的代码)来实现这一点,但这是问题所在:评论和评级没有重新排列,所以它在ListView.

例如,如果列表是:

  1. 汽车 3 4
  2. 人 5 3
  3. 动物 7 4

排序后items我得到:

  1. 动物 3 4
  2. 汽车 5 3
  3. 人 7 4

因此,items它们正在按我的意愿排列,但相关联的commentsratings 没有排序。我不确定如何做到这一点以及将其放置在哪里。我认为在 ArrayAdapter 中?

这是我更改items列表的代码:

        Comparator<String> ignoreLeadingThe = new Comparator<String>() {
            public int compare(String a, String b) {
                a = a.replaceAll("(?i)^the\\s+", "");
                b = b.replaceAll("(?i)^the\\s+", "");
                return a.compareToIgnoreCase(b);
            }
        };

        Collections.sort(items, ignoreLeadingThe);

这是问题吗?我可以在哪里以及如何根据项目列表的位置对评分和评论列表进行排序?

编辑:

这是我的 getView 代码ArrayAdapter

    ItemObject io = getItem(position);
    String name = io.name;
    String total = io.total;
    String rating = io.ratings;
    String comment = io.comments;

    holder.t1.setText(name);
    holder.t2.setText(total);
    holder.t3.setText(comment);
    holder.t4.setText(rating);

注意:上面的例子中我没有提到第 4 个ArrayList调用。total

4

1 回答 1

2

您应该考虑创建一个类来将您的项目包装在 ArrayList 中,如下所示:

class MyItem {
    String item;
    int ratings;
    int comments;
}

然后用这些对象的 ArrayList 代替:

List<MyItem> myList = new ArrayList<MyItem>();

然后在你的比较器中,就像你正在做的那样做,但是测试MyItem.item而不是仅仅aand b。像这样的东西:

Comparator<MyItem> ignoreLeadingThe = new Comparator<MyItem>() {
    public int compare(MyItem a, MyItem b) {
        a.item = a.item.replaceAll("(?i(^the\\s+", "");
        b.item = b.item.replaceAll("(?i(^the\\s+", "");
        return a.item.compareToIgnoreCase(b.item);
    }
};

Collections.sort(myList, ignoreLeadingThe);
于 2012-08-30T19:52:01.660 回答