使用数组适配器对列表视图进行排序

2024-04-25

我有一个连接到自定义数组适配器的列表视图。此列表显示 TCP 连接接收到的信息,这些信息会更改数据集...

我可以对列表视图进行排序sort (Comparator<? super T> comparator),但是当数据集更改时,列表视图不再排序......

我可以用sort ()每次更改数据集时,但我认为这不是最好的选择......

我怎样才能做到这一点?有什么建议么?

EDIT

我在实施所提出的解决方案时遇到问题......

MyComparatorB.java

public class MyComparatorB implements Comparator<DeviceB> {

private byte orderType;

public MyComparatorB(byte type) {

    this.orderType = type;

}

public int compare(DeviceB lhs, DeviceB rhs) {

    int res = 0;
    if (orderType == SortType.ALPHA) {
            res = (lhs.getName()).compareTo(rhs.getName());
        }
        else if (orderType == SortType.LAST_ACT) {
            res = (rhs.getTime().getTime()).compareTo(lhs.getTime().getTime());
        }
        return res;
    }

}

我的 customArrayAdapter.java 的片段

    @Override
public void notifyDataSetChanged() {
    super.notifyDataSetChanged();
}


//-----------Order the content of the arrayAdapter------------//
public void sort(byte sortType) {

    super.sort(new MyComparatorB(sortType));
    notifyDataSetChanged();
}

在我的 MyActivity.java 中

myDevAdapter.sort(SortType.ALPHA);

我调试的时候,方法super.sort(new MyComparatorB(sortType));被调用,并且 MyComparatorB 的构造函数也被调用。但方法compare(DeviceB lhs, DeviceB rhs)从未被调用并且我的 arrayList 未排序... 我做错了什么?


我想你需要重写通知数据集更改适配器中的方法并在调用其之前执行排序super。见下文:

@Override
public void notifyDataSetChanged() {
    //do your sorting here

    super.notifyDataSetChanged();
}

这样做会在您致电时对列表进行排序notifyDataSetChanged刷新列表项的方法。否则,将排序的列表/数组提供给您的适配器。


或者更优选地,使用sort http://developer.android.com/reference/android/widget/ArrayAdapter.html#sort%28java.util.Comparator%3C?%20super%20T%3E%29适配器中可用的方法来完成工作。

adapter.sort(new Comparator<String>() {
    @Override
    public int compare(String lhs, String rhs) {
        return lhs.compareTo(rhs);   //or whatever your sorting algorithm
    }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用数组适配器对列表视图进行排序 的相关文章

随机推荐