【发布时间】:2012-02-13 01:53:28
【问题描述】:
我想按产品名称对 ListView 的项目进行排序。我有一个称为“数据”的向量,它是一种类。
我的课是:
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);
}
};
}
我采用了一个扩展 ArrayAdapter<RowData> 的自定义适配器。
我在onCreate()写的排序代码如下,
Collections.sort(data, RowData.COMPARE_BY_PRODUCTNAME);
adapter = new CustomAdapter(this, R.layout.list,R.id.title, data);
setListAdapter(adapter);
adapter.notifyDataSetChanged();
我必须使用自定义适配器,因为要显示产品的价格以及产品的数量
数据是RowData 类型的向量,我在按我想要的产品名称的排序顺序调试后得到,但是当绑定到ListView 时,它没有按排序顺序显示。
我是安卓新手,请帮帮我。
感谢 Alex Lockwood,我正在使用 ArrayAdaptor<Class> 类型的自定义适配器。
在我的onCreate() 方法中,我正在实现如下排序方法,
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);
在我的customAdaptor 类中,我必须像这样覆盖sort,
public void sort(Comparator<? super RowData> comparator) {
// TODO Auto-generated method stub
super.sort(comparator);
}
如果您可以修改上述代码或建议我您的代码,请帮助我。
提前致谢。
【问题讨论】:
-
确保您的“CustomAdapter”能够显示普通数组或ArrayList。当这可行时 - 您还应该能够显示已排序的数据集。
-
当您将新适配器设置为列表时,您不需要使用 notifyDataSetChanged() 方法。只需粘贴您的适配器代码和活动代码。
-
谢谢 Copa 能否请您提供相同的代码,或者请您帮助我使用代码
-
感谢 jitendra sharma 但即使在删除 notifyDataSetChanged() 方法后它也无法正常工作
-
请使用正确的大小写,下次尝试更好地格式化您的代码。如果您的代码易于阅读,人们更有可能提供帮助:)。
标签: java android android-listview