Можно ли дважды использовать список Android в одном приложении?(отдельные мероприятия) - PullRequest
1 голос
/ 07 февраля 2012

У меня есть приложение, которое перечисляет элементы из 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>

Ответы [ 2 ]

0 голосов
/ 07 февраля 2012

Я пытался закрыть курсор, используемый SimpleCursorAdapter. У меня сложилось впечатление, что курсоры всегда должны быть закрыты после определенного момента, но я полагаю, что это не так.

0 голосов
/ 07 февраля 2012

Нет, вы не можете, если вы пытаетесь использовать, как вы описали.Список, который вы получаете, распространяется только на этот метод действий.Если вы не хотите делать еще один вызов БД во втором упражнении, вы можете объединить список и использовать его в другом пакете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...