2012-01-25 54 views
1

我是新來的android和經歷了許多教程後,我仍然無法得到的東西。在ListView中顯示數據庫

我已經創建了一個數據庫,現在正在閱讀這個數據庫。 此數據庫和3列所有三種字符串類型。

現在我想在R.layout.viewDatabase

使用ListView.I有這個ListView ID爲「listDatabaseItems」創建,以顯示該數據庫目前,我的代碼是:

Cursor c = sqliteDatabase.query(MY_DATABASE_TABLE, null, null, null, null, null, null); 

int firstNameColumn = c.getColumnIndex("name_column"); 
int protectedColumn = c.getColumnIndex("protected_id_column"); 

ArrayList<String> results = new ArrayList<String>(); 
int i = 0; 

c.moveToFirst(); 
do { 
    i++; 
    String firstName = c.getString(firstNameColumn); 
    String protectedID = c.getString(protectedColumn); 
    results.add(firstName + protectedID); // NEED TO add here 
} while (c.moveToNext()); 

sqliteDatabase.close(); 

請告訴我,我做什麼樣的變化以及如何在ListView中顯示我的數據庫。

最好的問候。

+0

請註明正確,你所面對的問題......? –

+0

我的代碼缺少詳細信息,如何將結果數組鏈接到我的ListView。 –

+0

我認爲你在通過遊標迭代時遇到問題......? –

回答

4

做一個AdapterListArray值添加到它,然後setAdapter到你的ListView簡單,

你的代碼後,補充一點,兩線,

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, results); 
mListView.setAdapter(adapter); 

而且,你的問題聽起來很基本的Android所以只要看看這些鏈接..

SimpleCursorAdapters and ListViews

Android SQLite Database and ContentProvider - Tutorial

Filling the Layout with Data

+0

語法錯了。它不接受結果。你確定ArrayAdapter ? –

+0

'mListView。setAdapter(adapter);'(其中mListView是ListView的一個實例,而不是ListView類) - 或者,如果您在ListActivity的子類中,則可以使用getListView()。setAdapter(adapter) ;' – dokkaebi

+0

感謝您的幫助,它的工作,但我如何列出數據到不同的列,而不是將它們列入一行? –

0

由於您使用的首位光標,其實我有SimpleCursorAdapter去。 CursorAdapter允許您避免將整個數據集加載到內存中,從而加快初始加載時間並避免大數據集的大量分配。

要擴展本文的基本設置(SimpleCursorAdapters and ListViews),您還需要設置視圖活頁夾以自定義數據綁定到視圖的方式,即。連接你的兩個字符串。

事情是這樣的:

SimpleCursorAdapter.ViewBinder binder = new SimpleCursorAdapter.ViewBinder() { 
    public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 
      //you're only using one view, so we can ignore columnIndex 
      TextView text = view.findViewById(R.id.list_item_text); 

      //the cursor is already in position for this list item 
      int firstNameColumn = c.getColumnIndex("name_column"); 
      int protectedColumn = c.getColumnIndex("protected_id_column"); 
      String firstName = c.getString(firstNameColumn); 
      String protectedID = c.getString(protectedColumn); 
      text.setText(firstName+protectedID); 
      return true; //we have handled binding the data 
     } 
}; 

然後,當你設置你的適配器,你通過它可以用來爲每個項目的佈局。佈局應該包含一個TextView來保存您想要顯示的文本項目。您可以使用android.R.layout.simple_list_item_1作爲user370305的建議,但我不確定它的TextView的id是什麼 - 它可能是android.R.id.text1

SimpleCursorAdapter adapter = new SimpleCursorAdapter(
    context,   //can be your Activity 
    R.layout.list_item, //xml layout containing textview with id 'list_item_text' 
    c,     //the cursor 
    new String[] {"name_column"}, //the column to read (we'll do more in the binder) 
    new int[] {R.id.list_item_text}, //the view to hold the data 
    0 //no flags 
); 
adapter.setViewBinder(binder);  

它添加到您的ListView以同樣的方式:

ListView listView = //your ListView reference 
listView.setAdapter(adapter); 

//or in a ListActivity: 
setListAdapter(adapter); 
相關問題