我正在测试一个基本的SQLite查询,并使用SimpleCursorAdapter来填充包含列数据的TextViews的LinearLayout的ListView,但是当我更改TextView的顺序时,TextView中的数据随订单移动,而不是R.id。
在下面的示例中,TextView的顺序是@ + id / rowid和@ + id / name,并且光标中的数据正确填充。
但是,如果我修改row.xml以更改EditText的顺序(我剪切整个TextView元素并将其粘贴到另一个TextView的另一侧),则光标中的数据保持相同的顺序,即。游标中的DatabaseHelper.NAME数据进入@ + id / rowid EditText,游标中的_id数据进入@ + id / name
这是正常行为吗?我期望SimpleCursorAdapter'从'列在构造函数中以各自的顺序填充'到'视图。
示例代码:
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>
答案 0 :(得分:1)
应该在&#34; from&#34;中显示列的视图参数。这些都应该是TextViews。此列表中的前N个视图将给出from参数中前N列的值。
尝试清理项目并再次运行。
我的猜测是R.id
文件中的R.java
值与编译的Java代码中的值不匹配。如果您只更改了XML文件,这是完全可能的。将重新生成R.java
,但使用R.id
的类不会使用新值重新编译。由于R.id
包含final
常量,编译器可以通过直接使用常量值来优化字节代码,而不是从变量中加载它。这会直接导致R.java
更改时遇到的问题,但不会重新编译其余代码。