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
对象,然后像上面那样使用它,用id
listplus
填充第二个活动中的列表。您的代码有些奇怪,您有填充的
ListActivity
但是您正在尝试在另一个活动中构建相同的布局(可能有一些变体)。也许您只想在当前活动中使用
列表视图
listplus
的xml布局?我想创建一个活动,在其中创建按钮、文本视图、一些图像等,并且我需要数据库,例如在按钮下。对我来说,自由处理这些项目(更改不透明度、颜色等)非常重要,这就是为什么我希望将整个数据库放入xml创建的活动中。如果您能帮助我将这个以编程方式创建的listvew更改为xml创建的listview,那也很好。:)发现我的错误花了这么多时间,然后你说我必须使用id为“@android:id/list”的ListView:)再次感谢你的帮助,我是一个初学者,我永远不会发现问题是这个。出于好奇,如果我有更多的列表视图,这些视图的ID是什么?因为android:id/list只有一个id,而android:id/list2不被接受。@JaniBela
ListActivity
只有一个列表具有该
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));
     }