2012-02-26 39 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