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:
@Override public void notifyDataSetChanged() { //do your sorting here super.notifyDataSetChanged(); }
Doing so will sort the list whenever you call notifyDataSetChanged
method to refresh list items. Otherwise, feed a sorted List/array to your adapter.
Or more preferably, use the sort
method available in your adapter to get the job done.
adapter.sort(new Comparator<String>() { @Override public int compare(String lhs, String rhs) { return lhs.compareTo(rhs); //or whatever your sorting algorithm } });
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With