我已经设置了以下光标来填充一个包含用户付款历史记录的对话框
Cursor PaymentsCursor = db.getReadableDatabase().rawQuery(
"SELECT _id, Date, Payment FROM tblPaymentHistory WHERE DebtName = '"
+ debtname + "'" + "ORDER BY _id ASC", null);
SimpleCursorAdapter HistoryAdapter = new SimpleCursorAdapter(this,
R.layout.paymenthistoryrow, PaymentsCursor, from, to);
问题在于,如果存在不止一种类型的债务,并且每笔债务的付款都乱序,当付款历史记录返回结果时,它会以乱序行号的形式返回,例如 1,2 ,6,7,9,12 等 我知道它正在从数据库中提取 _id(唯一键),但是有没有办法重新设置或更改查询中的行号,以便每个结果返回为“1、2、3、4、5 等“不管原来的身份证?
我认为 ORDER BY _id 甚至 ORDER BY Date ASC 会解决这个问题,但它没有。
我在数据库中的行看起来像这样:
1,测试,2012 年 4 月 13 日,250
2,测试,2012 年 4 月 13 日,300
3,测试,2012 年 4 月 14 日,222
4,TEST2,2012 年 4 月 14 日,500
5,测试,4/ 15/2012, 600
当用户单击“TEST”的历史记录时,它会以 1、2、3、5 的形式返回......如果他们拉起“TEST2”的历史记录,它会显示为“4”,我正在尝试获取它TEST 显示“1,2,3,4”,TEST2 显示“1”
该死的我无法回答我自己的答案,但这是我最终做的:
多谢你们。我找到了一个修改视图的替代选项,因此不必触摸 SqLite db。这是我找到的修改 SimpleCursorAdapter 数据的链接
结果如下:
PaymentsCursor = db.getReadableDatabase().rawQuery(
" SELECT _id, Date, Payment FROM tblPaymentHistory WHERE DebtName = '"
+ debtname + "'" + "ORDER BY _id ASC", null);
String[] from = new String[] { DbAdapter.KEY_HISTORY_ID,
DbAdapter.HISTORY_DATE, DbAdapter.HISTORY_PAYMENT };
int[] to = new int[] { R.id.PAYMENTNO, R.id.PAYMENTDATE,
R.id.PAYMENTAMOUNT };
SimpleCursorAdapter HistoryAdapter = new SimpleCursorAdapter(this,
R.layout.paymenthistoryrow, PaymentsCursor, from, to);
HistoryAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor, int column) {
if (column == 0) { // let's suppose that the column 0 is the
// date
TextView tv = (TextView) view;
String rownum = String.valueOf(cursor.getPosition() + 1);
// here you use SimpleDateFormat to bla blah blah
tv.setText(rownum);
return true;
}
return false;
}
});
paymenthistory.setAdapter(HistoryAdapter);
这可能不是最迷人的方式,但现在每次窗口出现历史记录时,它都使用行号(加一)来指示它是哪个#。谢谢大家!