android:list可以在同一个应用程序中使用两次吗?(单独活动)
我有一个应用程序,它在两个不同的位置列出SQLite中的项目,以便填充ListView。我在这两个地方使用相同的代码(当然是调整表名和字段名),但只有第一个listview填充了数据。如果我在两个活动之间切换表/字段名,那么第一个活动将正确填充第二个活动中未填充的数据。我想知道@+id/android:list是否在第一个活动中被保留或其他内容,从而禁止在第二个活动中填充它android:list可以在同一个应用程序中使用两次吗?(单独活动),android,sqlite,listview,cursor,Android,Sqlite,Listview,Cursor,我有一个应用程序,它在两个不同的位置列出SQLite中的项目,以便填充ListView。我在这两个地方使用相同的代码(当然是调整表名和字段名),但只有第一个listview填充了数据。如果我在两个活动之间切换表/字段名,那么第一个活动将正确填充第二个活动中未填充的数据。我想知道@+id/android:list是否在第一个活动中被保留或其他内容,从而禁止在第二个活动中填充它 <TextView android:id="@+id/secondfield1" android:lay
<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>
我已经在第二个活动中记录了游标数据,以确保我实际上在游标中获取数据,并且我是。对于未填充的ListView,我在Logcat中没有收到任何异常或任何类型的相关消息。交换表/字段名称时,最初填充到第一个listview的数据也不会填充到第二个listview。我唯一能想到的是@+id/android:list是不稳定的,每个应用程序只能使用一次。这是正确的还是我遗漏了一个细节
<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>
第一项活动:
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);
}
<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>
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>
<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>
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>
不,如果您尝试按所述使用,则不能。您正在获取的列表的范围仅限于该活动方法。如果不想在第二个活动中再次调用DB,可以将列表打包并在另一个包中使用。我正试图关闭SimpleCorsorAdapter使用的光标。我的印象是,游标应该总是在某一点之后关闭,但我想情况并非如此。填充第二个列表的数据与填充第一个列表的数据不同。你让它听起来好像如果我在第二个活动中再次调用DB,它就会工作。这就是我正在做的,ListView不会被填充。您是说我必须在第一个活动中查询第二个活动的listview数据库,然后将该数据打包到第二个活动中?编辑:这对我来说没有意义,因为第二个列表一直被填满,直到一个未知点。不过,我无法跟踪发生了什么变化。如果数据不同,并且您在第二个活动中进行了新的DB调用,那么它应该可以正常工作。发布与问题相关的代码。作为一个简单的测试,您能否将您在第一个活动中使用的相同查询硬编码到第二个活动中,并查看您得到了什么?是的,已经这样做了。我调出了查询,第一个活动中的列表已填充,而第二个活动中的列表未填充。在设置内容时,是否确定。。您引用的不是同一个listview 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>