Android 如何将数据库填充的ListView实现为另一个xml创建的ListView?
我创建了一个数据库,其中包含我放入Android 如何将数据库填充的ListView实现为另一个xml创建的ListView?,android,database,sqlite,android-listview,Android,Database,Sqlite,Android Listview,我创建了一个数据库,其中包含我放入列表视图中的数据。由于它是以编程方式创建的,因此没有包含此ListView的xml文件。代码: public class hornot extends Application{ public static final String KEY_ROWID = "_id"; public static final String KEY_NAME = "persons_name"; public static final String KEY_HOTNES
列表视图中的数据。由于它是以编程方式创建的,因此没有包含此ListView
的xml文件。代码:
public class hornot extends Application{
public static final String KEY_ROWID = "_id";
public static final String KEY_NAME = "persons_name";
public static final String KEY_HOTNESS = "persons_hotness";
public static final String DATABASE_NAME = "HotOrNotdb";
private static final String DATABASE_TABLE = "peopleTable";
private static final int DATABASE_VERSION = 1;
private DbHelper ourHelper;
private final Context ourContext;
private SQLiteDatabase ourDatabase;
private static class DbHelper extends SQLiteOpenHelper {
public DbHelper(Context context) {
super (context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
KEY_NAME + " TEXT NOT NULL, " +
KEY_HOTNESS + " TEXT NOT NULL);"
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
onCreate(db);
}
}
public hornot(Context c) {
ourContext = c;
}
public hornot open() throws SQLException{ //ez a throws kell az SQLiteExample.java try részhez
ourHelper = new DbHelper(ourContext);
ourDatabase = ourHelper.getWritableDatabase();
return this;
}
这就是我将项目放入列表视图的方式:
ListView lv;
ArrayList<String> todoItems = new ArrayList<String>();
ArrayList<String> todoItems2 = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, todoItems));
final ListView lv = getListView();
lv.setTextFilterEnabled(true);
final hornot info = new hornot(this);
info.open();
Cursor c = info.getAllTitles();
if (c.moveToFirst())
{
do{
todoItems.add(c.getString(0) + " " + c.getString(1) + " " + c.getString(2));
}while (c.moveToNext());
}
if (todoItems.size() > 0)
{
lv.setAdapter(new ArrayAdapter<String>(sqview.this,android.R.layout.simple_list_item_1, todoItems));
}
我该怎么做呢?我想您只需要一个带有自定义布局的列表活动。现在,如果您想让列表之外的其他元素(按钮、图像等)将内容视图设置为xml布局,可以使用ListActivity
(默认情况下仅显示全屏列表)。如果您将内容视图设置为自定义布局,则在该布局中,您必须有一个id为“@android:id/list”
的ListView
,以便您的ListView
知道数据绑定的位置。因此,如果要使用发布的布局,请修改它并将所需的id
添加到列表中:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button android:text="Button" android:id="@+id/b1"
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text="Button" android:id="@+id/b2"
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<ListView android:id="@android:id/list" android:layout_height="wrap_content"
android:layout_width="fill_parent"></ListView>
</LinearLayout>
1.为什么您的hornot
正在扩展应用程序
?2.您在哪里使用id为listplus
(这是另一项活动?)的ListView
布局。霍诺扩展应用程序是一个错误,它不存在:)2。是的,我想在另一个活动中使用它。我不知道这是否可行,但我希望所有方法都能在新的listview中工作,就像在旧的listview中一样。最好的选择是在每个类中使用hornot
对象,然后像上面那样使用它,用idlistplus
填充第二个活动中的列表。您的代码有些奇怪,您有填充的ListActivity
但是您正在尝试在另一个活动中构建相同的布局(可能有一些变体)。也许您只想在当前活动中使用列表视图listplus
的xml布局?我想创建一个活动,在其中创建按钮、文本视图、一些图像等,并且我需要数据库,例如在按钮下。对我来说,自由处理这些项目(更改不透明度、颜色等)非常重要,这就是为什么我希望将整个数据库放入xml创建的活动中。如果您能帮助我将这个以编程方式创建的listvew更改为xml创建的listview,那也很好。:)发现我的错误花了这么多时间,然后你说我必须使用id为“@android:id/list”的ListView:)再次感谢你的帮助,我是一个初学者,我永远不会发现问题是这个。出于好奇,如果我有更多的列表视图,这些视图的ID是什么?因为android:id/list只有一个id,而android:id/list2不被接受。@JaniBelaListActivity
只有一个列表具有该id
(@android:id/list
,并且只管理该ListView
)。如果除了具有特殊id的布局之外,您还希望在同一布局中有更多的ListView
,那么您将为他们提供您想要的任何id,但您必须自己管理,因为ListActivity
将只处理一个列表。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button android:text="Button" android:id="@+id/b1"
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text="Button" android:id="@+id/b2"
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<ListView android:id="@android:id/list" android:layout_height="wrap_content"
android:layout_width="fill_parent"></ListView>
</LinearLayout>
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.the_name_of_above_layout); // <=this line
setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, todoItems));
final ListView lv = getListView();
lv.setTextFilterEnabled(true);
final hornot info = new hornot(this);
info.open();
Cursor c = info.getAllTitles();
if (c.moveToFirst()) {
do {
todoItems.add(c.getString(0) + " " + c.getString(1) + " " + c.getString(2));
} while (c.moveToNext());
}
if (todoItems.size() > 0) {
lv.setAdapter(new ArrayAdapter<String> (sqview.this,android.R.layout.simple_list_item_1, todoItems));
}