2009-08-20 64 views
2

我使用此代碼從光標獲取項目,但它只是返回列表中的一個項目。那麼,我如何才能將所有項目都列入我的列表,這是我的代碼?從android中的光標獲取所有項目

class MyAdapter extends SimpleCursorAdapter 
{ 
    private Context context; 

    public MyAdapter(Context context, int layout, Cursor c, String[] from, int[] to) 
    { 
     super(context, layout, c, from, to); 
     this.context = context; 

    } 
    public View getView(int position, View convertView, ViewGroup parent){ 
     Cursor cursor = getCursor(); 

     LayoutInflater inflater = ((Activity) context).getLayoutInflater();   
     View v = inflater.inflate(R.layout.sbooks_row, null);   
     TextView title = (TextView)findViewById(R.id.title); 
     if(title != null){ 
      int index = cursor.getColumnIndex(SBooksDbAdapter.KEY_TITLE); 
      String type = cursor.getString(index); 
      title.setText(type); 
     } 

     TextView lyrics = (TextView)findViewById(R.id.lyrics); 
     if(lyrics != null){ 
      int index = cursor.getColumnIndex(SBooksDbAdapter.KEY_LYRICS); 
      String type = cursor.getString(index); 
      lyrics.setText(type); 
     } 

     ImageView im = (ImageView)findViewById(R.id.icon); 
     if(im!=null){ 
      int index = cursor.getColumnIndex(SBooksDbAdapter.KEY_FAVORITE); 
      int type = cursor.getInt(index); 
      if(type==1){ 
       im.setImageResource(android.R.drawable.btn_star_big_on); 
      } 
      else{ 
       im.setImageResource(android.R.drawable.btn_star_big_off); 
      } 
     } 

     return v; 
    } 

回答

5

CursorAdapter的表現比其他列表適配器有點不同 - 而不是getView(),魔術在這裏NewView的()和bindView()會發生,所以我覺得getView()是不正確的方法來覆蓋。

您可能只會得到一個結果,因爲在創建第一行之後,CursorAdapter希望bindView()插入新數據並重用已經膨脹的行,並且您期望getView()可以實現這一點。

我建議你嘗試將你的代碼移動到newView()來擴展你的視圖,bindView()來執行填充行的實際邏輯。

祝你好運,並讓我們更新結果。

+0

嗨,我嘗試編輯我的代碼與您的意見。我使用newView(),bindView()函數,並返回所有項目。 但我仍然有問題在我的列表視圖中,它顯示不正常。我的意思是,當我將scollbar上下拖動時,它顯示不同。我可以忘記一些事嗎? – Dennie 2009-08-23 10:46:48

+0

你是什麼意思的項目不正常顯示?如果您看到舊物品出現,而不是新物品(發生在我身上的普通適配器),則回收邏輯(bindView())應該存在問題。 P.S.I還建議您使用ViewHolder模式,如下所述:http://www.youtube.com/watch?v = N6YdwzAvwOA at 0:09:02。 – 2009-08-23 12:34:04

+0

該視頻鏈接對於任何想了解ListView下發生了什麼的人都很有幫助。謝謝Dimitar! – 2010-08-20 21:25:30

0

我假設由getCursor()方法返回正確檢索所有的行,你的表指針,你必須明確地將光標移動到的位置訪問數據的行之前,因此在你必須調用getView()方法的開始。

cursor.moveToPosition(position); 
+0

它還會返回一個項目!我認爲它在這裏不起作用。 – Dennie 2009-08-23 10:35:46

相關問題