У меня проблема с курсором и SimpleCursorAdapter.SimpleCursorAdapter не работает из-за отсутствия _id
Что я хочу сделать:
У меня есть база данных с 3 полями
_id | nickName | somethingelse
Я хочу четко определить все имена nickNames и предоставить их в AutoCompleteTextView.
Проблема:
При выполнении запроса (смотри ниже) я не выбрать _id-поле. Вот почему я получаю сообщение об ошибке при попытке создать SimpleCursorAdapter, потому что в курсоре нет поля «_id». Но если я выберу «_id» в запросе, никнеймы в курсоре больше не будут ущемлены! Кроме того, курсор не может быть изменен до моих знаний или не так ли?
Так что я понял, что обходное решение работает, но довольно плохой стиль программирования, потому что я делаю двойную работу ... Я просто помещаю те же данные в другой контейнер, а затем использую его. Разве нет прямого пути для этого? На самом деле это простая задача ... должен быть способ сделать это, и я не вижу этого.
Вот код:
protected void onPrepareDialog(int id, final Dialog dialog)
{
switch(id)
{
case R.layout.database_feed:
/*get all distinct names in the Database */
Cursor cursor2 = mDatabase.rawQuery("SELECT DISTINCT nickName FROM highscore_table "+
"ORDER BY nickName COLLATE NOCASE", null);
/* I didn't find a simple way to set cursor2 in a
* CursorAdapter for the AutoCompleteTextView.
* this was my first try (does not work): */
/*((AutoCompleteTextView) dialog.findViewById(R.id.actvName)).setAdapter(
new SimpleCursorAdapter(this,android.R.layout.simple_dropdown_item_1line,
cursor2, new String[] { "nickName" },
new int[] { android.R.layout.simple_dropdown_item_1line })
); */
/*this is my workaround ... it works but it's horrible*/
LinkedList<String> llsNames = new LinkedList<String>();
for(cursor2.moveToFirst(); !cursor2.isAfterLast(); cursor2.moveToNext())
{
llsNames.addLast(cursor2.getString(0));
}
((AutoCompleteTextView) dialog.findViewById(R.id.actvName)).setAdapter(new ArrayAdapter<String>(
this, android.R.layout.simple_dropdown_item_1line, llsNames
));
break;
default:
break;
}
}
Спасибо за любую помощь
Спасибо, это действительно решает проблему _id. Но теперь я заметил, что мне нужно реализовать функцию фильтрации AutoCompleteTextView, потому что SimpleCursorAdapter не может этого сделать сам по себе. Так что я думаю, что в любом случае я буду придерживаться обходного решения. Но спасибо за подсказку! Кстати: вот способ изменить отображение курсора: [Группы Google] (http://groups.google.com/group/android-developers/browse_thread/thread/796342d2a30c0c0b?pli=1) – Michi