Я пытаюсь реализовать CursorAdapter в моем приложении для Android.Я читал разные уроки и пробовал разные вещи, но это не сработает!Я нашел один вопрос здесь очень похожим на мой, но я не понял из этого.
Вот в чем дело:
Я получил базу данных с несколькими таблицами и внешними ключами и так далее.,Я написал (протестированную и работающую) базу данных, включая расширение класса SQLiteHelper для правильной работы.DB-Class содержит множество методов для получения различных операций над этой БД, таких как: вставка, обновление, удаление, изменение и некоторые особые потребности ....
Моя проблема заключается в следующем: я написал методкоторый возвращает все данные, содержащие (все строки) в базе данных, которые я хочу представить в ListView.Возвращаемый объект - это обернутый ArrayList>.У меня все отлично работает с ListViewAdapter, но потом я пришел к своей проблеме, которая почти сводит меня с ума:
Пользователь должен щелкнуть по случайному элементу в этом конкретном списке (который содержит все строки из БД)и затем я хочу обновить эту конкретную строку в БД новыми данными, которые пользователь поместил в поле EditText.На самом деле довольно простая задача, но я думаю, что просто не понимаю, как использовать CursorAdapter.
Мои вопросы сейчас:
- Что должен вернуть мой DB-метод (или посмотретьа также) что CursorAdapter может с этим справиться ....
- Как мне реализовать Адаптер, чтобы он просто выполнял эту одну задачу (получая правильный rowID записи БД в списке)
Вот мой метод извлечения данных из БД
public ArrayList<ArrayList<Object>> getAll()
{
ArrayList<ArrayList<Object>> allRows = new ArrayList<ArrayList<Object>>();
//Cursorobjekt haelt die Daten einer Zeile und dient dazu in diesen zu iterieren
Cursor myCursor1,myCursor2,myCursor3;
myCursor1 = db.query
( "Faecher",
new String[] { "id" , FACH_NAME, FACH_ART },
null, null, null, null, null
);
// Den Pointer an die erste Stelle ruecken
myCursor1.moveToFirst();
myCursor2 = db.query
(
"Ort",
new String[]{"id" , ORT_RAUM , ORT_GEBAEUDE},
null,null,null,null,null,null
);
myCursor2.moveToFirst();
myCursor3 = db.query
(
"Profs",
new String[]{"id", PROFS_NAME, PROFS_SNAME, FKEY_GENDER_ID},
null,null,null,null,null,null
);
myCursor3.moveToFirst();
for(int i=0; i < myCursor1.getCount(); i++)
{
ArrayList<Object> row1 = new ArrayList<Object>();
row1.add(myCursor1.getLong(0));
row1.add(myCursor1.getString(1));
row1.add(myCursor1.getString(2));
row1.add(myCursor2.getLong(0));
row1.add(myCursor2.getString(1));
row1.add(myCursor2.getString(2));
row1.add(myCursor3.getLong(0));
row1.add(myCursor3.getString(1));
row1.add(myCursor3.getString(2));
row1.add(myCursor3.getLong(3));
allRows.add(row1);
myCursor1.moveToNext();
myCursor2.moveToNext();
myCursor3.moveToNext();
}
myCursor1.close();
myCursor2.close();
myCursor3.close();
return allRows;
}
Адаптер сейчас пуст, потому что мой код был настоящим дерьмом и теперь выглядит как этот корпус:
public class SubjectListAdapter extends CursorAdapter
{
private LayoutInflater myInflater;
public SubjectListAdapter(Context context, Cursor c)
{
super(context, c);
}
@Override
public View newView(Context context, Cursor myCursor, ViewGroup parent)
{
return null;
}
@Override
public void bindView(View parent, Context context, Cursor myCursor)
{
}
}
Я надеюсь, что кто-то может помочь мне решить мою проблему или дать подсказку, куда мне обратиться, чтобы это сработало.