I have a listview connected to a custom array adapter. This list shows information received by a TCP connection which changes the dataSet…
I am able to sort the listview with sort (Comparator<? super T> comparator), but when the dataSet is changed, the listview is no more sorted…
I can use sort () every time the dataSet is changed, but I think this is not the best option…
How can I do that? Any suggestions?
EDIT
I am having problems in implementing the solutions presented…
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;
}
}
Snippet of my 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();
}
In my MyActivity.java
myDevAdapter.sort(SortType.ALPHA);
When I am debugging, the method super.sort(new MyComparatorB(sortType)); is called and the constructor of MyComparatorB is called too. But the method compare(DeviceB lhs, DeviceB rhs) is never called and my arrayList is not sorted…
What I am doing wrong?
I guess you need to override notifyDataSetChanged method in your adapter and perform sorting right before calling its super. See below:
Doing so will sort the list whenever you call
notifyDataSetChangedmethod to refresh list items. Otherwise, feed a sorted List/array to your adapter.Or more preferably, use the
sortmethod available in your adapter to get the job done.