我正在使用许多 Spinner 供用户输入数据,然后将其保存到 SQLite 数据库中。每个 Spinner 都填充有来自数据库表的数据。
我想控制数据显示的顺序 - 例如,下面是“数量”微调器代码:
// QUANTITY SPINNER
Cursor quantityCursor = rmDbHelper.fetchAllQuantities();
startManagingCursor(quantityCursor);
// create an array to specify which fields we want to display
String[] from6 = new String[]{RMDbAdapter.QUANTITY_FORM_TEXT};
int[] to6 = new int[]{android.R.id.text1};
// create simple cursor adapter
SimpleCursorAdapter quantitySpinnerAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, quantityCursor, from6, to6 );
quantitySpinnerAdapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item );
// get reference to our spinner
quantitySpinner.setAdapter(quantitySpinnerAdapter);
if (damagedComponentId > 0) { // Set spinner to saved data
int spinnerPosition = 0;
for (int i = 0; i < quantitySpinner.getCount(); i++)
{
Cursor cur = (Cursor)(quantitySpinner.getItemAtPosition(i));
//--When your bind you data to the spinner to begin with, whatever columns you
//--used you will need to reference it in the cursors getString() method...
//--Since "getString()" returns the value of the requested column as a String--
//--(In my case) the 4th column of my spinner contained all of my text values
//--hence why I set the index of "getString()" method to "getString(3)"
int quantitySpinnerItem = cur.getInt(1);
if(quantitySpinnerItem == quantitySpinnerData)
{
//--get the spinner position--
spinnerPosition = i;
break;
}
}
quantitySpinner.setSelection(spinnerPosition);
}
else { // Set spinner to default
int spinnerPosition = 0;
for (int i = 0; i < quantitySpinner.getCount(); i++)
{
Cursor cur = (Cursor)(quantitySpinner.getItemAtPosition(i));
int quantitySpinnerItem = cur.getInt(1);
if(quantitySpinnerItem == 1)
{
//--get the spinner position--
spinnerPosition = i;
break;
}
}
positionSpinner.setSelection(spinnerPosition);
}
现在这工作正常,除了它将数据排序如下:1、10、11、12、13、14、15、16、17、18、19、2、20、21等。显然我希望它显示1, 2、3等
现在我知道我可以使用“NumberPicker”(而不是 Spinner)或者我可以使用 01、02、03 来绕过默认排序,但是有没有办法改变 Spinner 显示数据的顺序?
我见过两个可能有效的选项(但我看不到在哪里添加到我的代码中):
1) 使用 Collections.sort(SourceArray) ,如下所示:Spinner datasorting in Android。但是,无法使用我的 Spinner 进行这项工作。
或者这个:
2)在查询数据库时设置“order by id”,如下所示:Rearrange list view items in SimpleCursorAdapter。但是看不到你会在哪里做这个..
任何建议都非常感谢..
编辑 - 以下是我的数据库助手类中的代码:
public Cursor fetchAllQuantities() {
return rmDb.query(QUANTITY_TABLE, new String[] {
QUANTITY_ID,
QUANTITY_FORM_TEXT},
null, null, null, null, QUANTITY_ID);
}
我现在已经包含了 ORDER BY 语句 (QUANTITY_ID),但这对 Spinner 显示数据的顺序没有影响。
编辑 2 - 从头开始我的最后一条语句,它已正确排序,但是当第一次创建数据库时,它以默认顺序输入数字。所以下面是我输入数据的地方:
db.execSQL("INSERT INTO " + QUANTITY_TABLE + "(" + QUANTITY_FORM_TEXT + ")" +
" SELECT '1' AS " + QUANTITY_FORM_TEXT +
" UNION SELECT '2' " +
" UNION SELECT '3' " +
" UNION SELECT '4' " +
" UNION SELECT '5' " +
" UNION SELECT '6' " +
" UNION SELECT '7' " +
" UNION SELECT '8' " +
" UNION SELECT '9' " +
" UNION SELECT '10' " +
" UNION SELECT '11' " +
" UNION SELECT '12' " +
" UNION SELECT '13' " + etc.
但是当我查看 SQLite 程序中的数据库表时,它看起来像这样:
_id | quantity_form_text
1 | 1
2 | 10
3 | 11
4 | 12
5 | 13
6 | 14 etc.
所以我想我现在的问题是你首先如何控制数据进入数据库?