2012-02-26 42 views
0

我创建了一个数据库,其中包含了我放入ListView的数据。由于它是以编程方式创建的,因此不存在包含此ListView的xml文件。代码:如何实现一个数据库填充ListView到另一个xml创建的ListView?

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

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,我想放编程方式创建ListView到另一个ListView(ID为listplus ):

<?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="@+id/listplus" android:layout_height="wrap_content" 
    android:layout_width="fill_parent"><;/ListView> 
</LinearLayout> 

我该怎么做?

+0

1.为什么是你的'hornot'扩展'Application'吗? 2.你在哪里使用ListView的布局,ID为listplus(这是另一个活动?) – Luksprog 2012-02-26 21:19:47

+0

@slukian 1. hornot extend应用程序是一个错误,它不在那里:) 2.是的,我想在另一个活动中使用它 – 2012-02-26 21:23:57

+0

我不知道它是否可能,但我想所有的方法在新的列表视图中工作,就像在旧的。 – 2012-02-26 21:30:55

回答

2

我认为你只想要一个ListActivity自定义布局。现在你使用一个ListActivity(默认情况下只显示一个完整的屏幕列表),如果你想有除列表之外的其他元素(按钮,图像等)将内容视图设置为xml布局。如果您将内容视图设置为自定义布局,那么在该布局中,必须ListView的编号为"@android:id/list",以便您的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> 

然后在你当前ListActivity您所使用只需添加一行:

@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)); 
    } 
+0

这么多时间,我发现我的错误消失,然后你说我必须有id为“@android:id/list”的ListView :)谢谢你的帮助,我是初学者,我从来没有发现过问题是这样的。只是为了好奇心,如果我有更多的列表视图,那可能是什么?由于android:id/list只有一个id,android:id/list2不被接受。 – 2012-02-26 23:11:34

+0

@JaniBela'ListActivity'只有一个带有'id'的列表('@android:id/list',并且只管理这个'ListView')。如果你想在具有特殊ID的布局以外的同一个布局中使用更多的'ListView',那么你会给它们任何你想要的标识,但是你也必须自己管理,因为'ListActivity'只能处理一个列表。 – Luksprog 2012-02-27 07:59:03