我在使用ListView
命令在Android中填充rawQuery
时遇到了一些问题,我希望有一些新的眼睛可以帮助我。
我正在使用一种方法从assets文件夹复制我自己的数据库,我相信这是正常的。数据库正在被正确复制,因为我正在DDMS
中看到这种情况。我也收到log.i
个条目,告诉我数据库正在正常打开。我在Logcat时没有收到任何错误,但没有任何内容填充我的ListView
。
我的命令下面有什么问题可以查询数据库并报告回来吗?
非常感谢任何帮助。
private void fillData() {
Cursor c = myDbHelper.rawQuery("SELECT name FROM sqlite_master", null);
startManagingCursor(c);
// Create an array to specify the fields we want to display in the list.
String[] from = new String[]{"name"};
// an array of the views that we want to bind those fields too.
int[] to = new int[]{R.id.listview};
// Now create a simple cursor adapter and set it to display
SimpleCursorAdapter notes =
new SimpleCursorAdapter(this, R.layout.list_view, c, from, to);
setListAdapter(notes);
}
这是我的lists.xml文件,我想要填充ListView的结果:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:text = "Lists"
style="@style/HeaderText"
android:textSize="15dp"
android:gravity="center" />
<View
android:layout_width="wrap_content"
android:background="@drawable/gradient"
android:layout_height="1dp" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<EditText
android:id="@+id/searchText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<Button
android:id="@+id/searchButton"
android:text="Search"
android:background = "@drawable/main_buttons"
style="@style/ButtonText"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />"
</LinearLayout>
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<TextView android:id="@android:id/empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:text="No data"
style="@style/ButtonText"/>
</LinearLayout>
</LinearLayout>
最后,list_view
布局只是TextView
来填充rawQuery
命令中的正确列表。
答案 0 :(得分:1)
如果要在列表中显示表名,可以尝试使用fillData()
方法:
private void fillData() {
Cursor c = myDbHelper.rawQuery("SELECT name FROM sqlite_master", null);
ArrayList<String> values = new ArrayList<String>();
while (c.moveToNext()) {
values.add(c.getString(c.getColumnIndex("name")));
}
c.close();
// Now create a simple cursor adapter and set it to display
ArrayAdapter<String> notes = new ArrayAdapter<String>(this,
R.layout.list_view, values);
setListAdapter(notes);
}
ListView
要求所基于的游标具有_id
列。但是在该表中,您没有_id
添加到查询中,因此您可以尝试将原始查询中的游标解析为ArrayList
,然后将其绑定到简单ArrayAdapter
}。
答案 1 :(得分:0)
好的,这里有点奇怪。 The reference说
ListActivity的默认布局由单个布局组成, 屏幕中央的全屏列表。但是,如果你愿意, 您可以通过设置自己的视图布局来自定义屏幕布局 在onCreate()中使用setContentView()。要做到这一点,你自己的观点必须 包含一个ID为“@android:id / list”的ListView对象(或列出if 它在代码中)
所以,它说我们应该像你一样使用@android:id/list
。
我想您正在关注Notebook教程。是的,我有一个类似的情况,我有自己的entries_list.xml
smth的布局(ListActivity
)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
... some other elements here
<ListView
android:id="@+id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textFilterEnabled="true" >
</ListView>
... some other elements here
</LinearLayout>
所以我使用自己的命名:@+id/android:list
代替。然后,我使用ListActivity
明确设置setContentView(R.layout.entries_list);
的内容视图。这适合我。你可以尝试一下。
希望它有所帮助。