我想对listview进行排序,以便添加的最新数据位于顶部。我试图通过使用order by子句和for循环进行排序,如从其他Q&一个 。但我无法得到结果。请帮忙。谢谢。
查看课程
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
_productlist.clear();
db = new DatabaseHelper(getApplicationContext());
db.getWritableDatabase();
ArrayList<ProductModel> product_list = db.getProudcts();
for (int i = 0; i < product_list.size(); i++) {
String tidno = product_list.get(i).getIdno();
System.out.println("tidno>>>>>" + tidno);
String tname = product_list.get(i).getProductname();
String tprice = product_list.get(i).getProductprice();
String tadd = product_list.get(i).getProductadd();
ProductModel _ProductModel = new ProductModel();
_ProductModel.setIdno(tidno);
_ProductModel.setProductname(tname);
_ProductModel.setProductprice(tprice);
_ProductModel.setProductadd(tadd);
_productlist.add(_ProductModel);
}
listview.setAdapter(new ListAdapter(this));
db.close();
}
我的getAllData方法
public ArrayList<ProductModel> getProudcts() {
cartList.clear();
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery("select * from producttable", null);
if (cursor.getCount() != 0) {
if (cursor.moveToFirst()) {
do {
ProductModel item = new ProductModel();
item.idno = cursor.getString(cursor
.getColumnIndex("productidno"));
item.productname = cursor.getString(cursor
.getColumnIndex("productname"));
item.productprice = cursor.getString(cursor
.getColumnIndex("productprice"));
item.productadd = cursor.getString(cursor
.getColumnIndex("productadd"));
cartList.add(item);
} while (cursor.moveToNext());
}
}
cursor.close();
db.close();
return cartList;
}
答案 0 :(得分:3)
Collections.sort(list);
Collections.reverse(list);
或者你可以实现自己的比较器来排序并消除相反的步骤:
Collections.sort(list, new Comparator<Long>() {
public int compare(Long o1, Long o2) {
return o2.compareTo(o1);
}
})
或者更简单地使用Collections.reverseOrder()
,因为你只是在逆转:
Collections.sort(list, Collections.reverseOrder());
答案 1 :(得分:2)
在索引0
添加列表项 _productlist.add(0,_ProductModel);
它对我有用。试试看。 添加对象后,列表调用notifyDataSetChanged()
listAdapter.notifyDataSetChanged();
以下是一个例子:
public class MainActivity extends Activity {
private ListView lv;
private Button bt;
int i = 0;
private ArrayList<Integer> al;
private ArrayAdapter<Integer> aa;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.listView1);
bt = (Button) findViewById(R.id.button1);
al = new ArrayList<Integer>();
aa = new ArrayAdapter<Integer>(getApplicationContext(),
android.R.layout.simple_list_item_1, al);
lv.setAdapter(aa);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
al.add(0, i++);
aa.notifyDataSetChanged();
}
});
}
答案 2 :(得分:0)
我会使用#dipali建议的内容,但在listviews适配器上调用notifyDataSetChanged()。
答案 3 :(得分:0)
你可以用三种不同的方式做到这一点。
您可以在数据库表中添加时间戳列。更新此列,即可添加或编辑产品,并根据时间戳对产品进行排序。
您可以在查询中使用ORDER BY DESC来获取有序结果。
按顺序从适配器设置值 for(int i = productlist.size(); i&gt; 0; i--) {
}