#android #sqlite #cursor #android-adapter
#Android #sqlite #курсор #android-адаптер
Вопрос:
Я создал подкласс CursorAdapter, который используется для отображения 4 отдельных списков данных в моем приложении.
Каждый список использует другой столбец из базы данных. Мой вопрос в том, как я должен указать адаптеру, какой столбец использовать?
В приведенных ниже кратких примерах 2, которые будут считаться лучшей практикой:
Вариант 1
- Передайте имя столбца в конструктор моего адаптера.
- Это означает, что фрагменту необходимо будет знать имя столбца.
—
// In my fragment:
DBHelper helper = new DBHelper(getActivity());
Cursor cursor = helper.getTitleCursor();
adapter = new CustomCursorAdapter(getActivity(), cursor, DBHelper.COL_TITLE);
// The constructor of my CursorAdapter:
public CustomCursorAdapter(Context context, Cursor cursor, String colName) {
super(context, cursor, 0);
inflater = LayoutInflater.from(context);
this.displayColumn = colName;
}
// In my cursor adapter:
public void bindView(View view, Context context, Cursor cursor) {
TextView title = (TextView) view.findViewById(R.id.row_title);
String titleText = cursor.getString(cursor.getColumnIndex(displayColumn));
title.setText(titleText);
}
Вариант 2
- При создании курсора используйте
AS
, чтобы присвоить столбцу определенное имя. - Это означает, что фрагменту не нужно знать имя столбца, хотя я не уверен, что это лучшее решение.
_
// In my DB Helper
public Cursor getTitleCursor() {
String query = "SELECT title AS displayCol FROM myTable"
return db.rawQuery(query, null);
}
// In my DB Helper
public Cursor getGenreCursor() {
String query = "SELECT genre AS displayCol FROM myTable"
return db.rawQuery(query, null);
}
// In my fragment:
DBHelper helper = new DBHelper(getActivity());
Cursor cursor = helper.getTitleCursor();
adapter = new CustomCursorAdapter(getActivity(), cursor);
// The constructor of my CursorAdapter:
public CustomCursorAdapter(Context context, Cursor cursor) {
super(context, cursor, 0);
inflater = LayoutInflater.from(context);
}
// In my cursor adapter
public void bindView(View view, Context context, Cursor cursor) {
TextView title = (TextView) view.findViewById(R.id.row_title);
String titleText = cursor.getString(cursor.getColumnIndex("displayCol"));
title.setText(titleText);
}
Комментарии:
1. Для платформы Android требуется столбец с именем
_id
для некоторых курсоров. Но что именно вы имеете в виду под «лучше»?2. @CL Это именно то, что заставило меня усомниться в этом — класс CursorAdapter (т. Е. родительский класс) требует, чтобы вы передавали столбец с именем
_id
. Под «лучше» я имею в виду, есть ли какая-либо очевидная причина использовать один вариант поверх другого?