Chcę posortować elementy listy według nazwy produktu. Mam wektor o nazwie "dane", który jest typem klasy.Sortowanie listView według nazwy produktu za pomocą niestandardowego adaptera?
Klasa mam to:
public static class RowData implements Comparable<RowData>{
public String mProductName;
protected int mId;
protected int mOnHand;
protected double mPrice;
protected boolean mIsColleaction;
protected boolean mIsPrePack;
RowData(int id ,String productName,int onhand,double price,boolean IsColleaction, boolean IsPrePack) {
mId= id;
mProductName= productName;
mOnHand =onhand;
mPrice = price;
mIsColleaction =IsColleaction;
mIsPrePack = IsPrePack;
}
@Override
public String toString() {
return mProductName;
}
public int compareTo(RowData other) {
return mProductName.compareTo(other.mProductName);
}
public static Comparator<RowData> COMPARE_BY_PRODUCTNAME = new Comparator<RowData>() {
public int compare(RowData one, RowData other) {
return one.mProductName.compareTo(other.mProductName);
}
};
}
i brałem kartę niestandardową, która rozciąga ArrayAdapter<RowData>
.
Mój kod sortowania Pisałem w onCreate()
jest następująca,
Collections.sort(data, RowData.COMPARE_BY_PRODUCTNAME);
adapter = new CustomAdapter(this, R.layout.list,R.id.title, data);
setListAdapter(adapter);
adapter.notifyDataSetChanged();
muszę używać adaptera niestandardowego dlatego, aby pokazać cenę produktu, jak również ilość w ręku produktu
dane, które są wektorem typu RowData
Dostaję się po debugowaniu w posortowanej kolejności produktu Nazwa, której chcę, ale po związaniu z ListView
nie jest wyświetlana w posortowanej kolejności.
Jestem nowy na Androida, pomóż mi.
Dzięki Alex Lockwood, używam niestandardowego adaptera typu ArrayAdaptor<Class>
.
W mojej metody onCreate()
Ja realizacji sortowania sposób jak poniżej,
adapter = new CustomAdapter(this, R.layout.list,R.id.title, data);
adapter.sort(new Comparator<RowData>() {
public int compare(RowData arg0, RowData arg1) {
return arg0.mProductName.compareTo(arg1.mProductName);
}
});
setListAdapter(adapter);
W moim customAdaptor
klasie, muszę zastąpić sort
takiego,
public void sort(Comparator<? super RowData> comparator) {
// TODO Auto-generated method stub
super.sort(comparator);
}
jeśli możesz mi pomóc zmodyfikuj powyższy kod lub zasugeruj mi swój kod.
Z góry dziękuję.
Upewnij się, że Twój "CustomAdapter" jest w stanie wyświetlić normalną tablicę lub ArrayList. Gdy to zadziała - powinieneś również mieć możliwość wyświetlenia posortowanego zestawu danych. –
Nie musisz używać metody notifyDataSetChanged(), gdy ustawiasz nową kartę do listy. Wystarczy wkleić kod adaptera i kod aktywności. – jeet
Dzięki Copa Czy mógłbyś podać mi kod dla tego samego, czy mógłbyś mi pomóc, używając kodu –