Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android:list可以在同一个应用程序中使用两次吗?(单独活动)_Android_Sqlite_Listview_Cursor - Fatal编程技术网

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

我有一个应用程序,它在两个不同的位置列出SQLite中的项目,以便填充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>
我已经在第二个活动中记录了游标数据,以确保我实际上在游标中获取数据,并且我是。对于未填充的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>