2014-09-08 3 views
0

Я тестирую базовый SQLite-запрос и используя SimpleCursorAdapter для заполнения ListView, содержащего LinearLayout, которые содержат TextViews данных столбца, но когда я изменяю порядок TextView, данные в перемещении TextView с порядком, а не с помощью R.id.Предполагается, что конструктор SimpleCursorAdapter должен наблюдать порядок столбцов в конструкторе?

В приведенном ниже примере порядок TextView - это @ + id/rowid и @ + id/name, и данные из курсора правильно заполняются.

Однако, если я изменяю row.xml для изменения порядка EditText (я вырезал весь элемент TextView и вставлял его на противоположную сторону другого TextView), данные из курсора остаются в том же порядке, то есть. данные DatabaseHelper.NAME из курсора переходят в текстовый файл @ + id/rowid EditText, а данные _id от курсора переходят в @ + id/name

Это нормальное поведение? Я ожидал, что столбцы SimpleCursorAdapter «from» будут заполнять представления «to» в соответствующем порядке в конструкторе.

Пример кода:

Cursor usersCursor; 
    String query = String.format("SELECT _id, %s FROM %s", 
      DatabaseHelper.NAME, DatabaseHelper.TABLE); 
    cursor = db.getReadableDatabase().rawQuery(query, null); 

    usersCursorAdapter = new SimpleCursorAdapter(getActivity(), 
      R.layout.row, usersCursor, 
      new String[] { "_id", DatabaseHelper.NAME }, 
      new int[] { R.id.rowid, R.id.name }, 
      0); 

    userList.setAdapter(usersCursorAdapter); 

и R.layout.row.xml является:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView 
     android:id="@+id/rowid" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="16dp" /> 

    <TextView 
     android:id="@+id/name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="4dp" 
     android:textSize="36sp" /> 

</LinearLayout> 

ответ

1

Представления, которые должны отображаться в столбце "от" параметра. Все они должны быть TextViews. В первых N представлениях в этом списке заданы значения первых N столбцов в параметре from.

Source

Попробуйте очистить свой проект и запустить его снова.

Моя догадка заключается в том, что значения R.id в вашем файле R.java не соответствуют данным в скомпилированном Java-коде. Это вполне возможно, если вы только изменили файлы XML. R.java будет восстановлен, но классы, которые используют R.id, не перекомпилируются с новыми значениями. Так как R.id содержит константы final, компилятор может оптимизировать байтовый код, используя постоянное значение напрямую, а не загружая его из переменной. Это напрямую вызывает проблему, которую вы видите при изменении R.java, но остальная часть вашего кода не перекомпилирована.

+0

Darn, это сделал. Так будет ли это быть спецификацией Eclipse/ADT или связано с инструментами сборки SDK? – troutit

+1

@troutit Это можно увидеть с помощью любого инструмента сборки, который не знает, что ваш код Java зависит от 'R.java'. Если инструмент сборки не знает, чтобы перестроить ваш код при изменении «R.java», вы увидите эти проблемы. –

 Смежные вопросы

  • Нет связанных вопросов^_^