У меня есть приложение, которое перечисляет элементы из SQLite в двух разных местах для заполнения списков.Я использую идентичный код в обоих местах (конечно, с поправкой на имена таблиц и полей), но только первое представление списка заполняется данными.Если я переключаю имена таблиц / полей между двумя действиями, то первое из них правильно заполняется данными, которые не заполняются во втором действии.Мне интересно, если @ + id / android: list зарезервирован или что-то в первом действии, запретив его заполнение во втором действии.
Я зарегистрировал данные курсора во втором действии, чтобы убедиться, чтоЯ на самом деле получаю данные в курсоре, и я.Я не получаю никаких исключений или соответствующих сообщений в Logcat для ListView, который не заполняется.Когда я поменял местами имена таблиц / полей, данные, которые первоначально заполнялись в первом просмотре списка, также не заполнялись во втором просмотре списка.Единственное, что я могу понять, это то, что @ + id / android: list является изменчивым и может использоваться только один раз для каждого приложения.Это правильно или есть деталь, которую я упускаю?
ПЕРВАЯ ДЕЯТЕЛЬНОСТЬ:
private static final String fields[] = { "firstfield1", "firstfield2", "_id" };
...
final CursorAdapter dataSource;
DatabaseHelper helper = new DatabaseHelper(this);
database = helper.getWritableDatabase();
Cursor cur = database.rawQuery("SELECT COUNT(*) firsttable", null);
if (cur != null) {
cur.moveToFirst(); // Always one row returned.
if (cur.getInt (0) == 0) { // Zero count means empty table.
} else {
Cursor data = database.query("firsttable", fields, null, null, null, null, null);
dataSource = new SimpleCursorAdapter(this, R.layout.rowcolumns, data, fields, new int[] { R.id.firstfield1, R.id.firstfield2});
data.moveToFirst();
while (data.isAfterLast() == false){
Log.i("MyActivity", "data: "+data.getString(0));
data.moveToNext();
}
final ListView view = getListView();
setListAdapter(dataSource);
}
ROWCOLUMNS.XML
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:paddingTop="4dip"
android:paddingBottom="6dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView android:id="@+id/firstfield1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_weight="1"
/>
<TextView android:id="@+id/firstfield2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginLeft="30dp"/>
</LinearLayout>
ВТОРАЯ ДЕЯТЕЛЬНОСТЬ
private static final String fields[] = { "secondfield1", "secondfield2", "_id" };
...
final CursorAdapter dataSource;
DatabaseHelper helper = new DatabaseHelper(this);
database = helper.getWritableDatabase();
Cursor cur = database.rawQuery("SELECT COUNT(*) secondtable", null);
if (cur != null) {
cur.moveToFirst(); // Always one row returned.
if (cur.getInt (0) == 0) { // Zero count means empty table.
Log.i("CastrActivity", "Empty cursor");
} else {
Cursor data = database.query("secondtable", listFields, null, null, null, null, null);
dataSource = new SimpleCursorAdapter(this, R.layout.secondcolumns, data, listFields, new int[] { R.id.secondfield1, R.id.secondfield2});
data.moveToFirst();
while (data.isAfterLast() == false){
Log.i("MyActivity", "data: "+data.getString(0));
data.moveToNext();
}
final ListView view = getListView();
setListAdapter(dataSource);
}
SECONDCOLUMNS.XML
<TextView android:id="@+id/secondfield1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_weight="1"
/>
<TextView android:id="@+id/secondfield2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginLeft="30dp"/>
</LinearLayout>