2012-01-15 66 views
0

我試圖獲取ListView成員的數據庫ID,以便我可以將它傳遞給一個新的活動,但SimpleCursorAdapter的.getItemId(位置)方法返回null,而不是數據庫中的_id。這是我的理解,這應該返回光標抓住_id字段,但它不適合我。也許需要一些建議dataSource.getItemId(position)返回null

DatabaseHelper helper = new DatabaseHelper(this); 
    database = helper.getWritableDatabase(); 
    Cursor data = database.query("myDb", fields, null, null, null, null, null); 
    dataSource = new SimpleCursorAdapter(this, R.layout.row, data, fields, new int[] {R.id.idText, R.id.castName, R.id.castDescription}); 
    data.moveToFirst(); 

    final ListView view = getListView(); 

    view.setHeaderDividersEnabled(true); 
    view.addHeaderView(getLayoutInflater().inflate(R.layout.row, null)); 
    setListAdapter(dataSource); 


    database.close(); 

    view.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 


      // Prepare intent 
     Intent newActivity = new Intent(getApplicationContext(), ItemIdTester.class); 
      newActivity.putExtra("itemId",dataSource.getItemId(position)); 

      // start activity 
      startActivity(newActivity); 
      } 
     }); 
+0

確實R.id.idText有_id映射嗎? – nandeesh 2012-01-15 16:56:09

+0

是的,文本得到適當的填充,據我可以告訴 – Carnivoris 2012-01-15 17:08:04

+0

你要查詢哪些字段? – JoxTraex 2012-01-15 18:38:12

回答

0

適配器是因爲添加的頭由

view.setHeaderDividersEnabled(true); 
view.addHeaderView(getLayoutInflater().inflate(R.layout.row, null)); 

返回null,我也開始直接從遊標得到我的數據。這裏是完整的onItemClickListener修復問題

view.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 

      Cursor cursor = (Cursor) dataSource.getItem(position-1); 

      Long itemId = cursor.getLong(0); 
      // Prepare intent 
      Intent newActivity = new Intent(getApplicationContext(), CastrRecorder.class); 
      newActivity.putExtra("itemId",itemId.toString()); 
      // start activity 
      startActivity(newActivity); 
      } 
     }); 
+0

爲什麼addHeaderView使適配器返回null? – 2012-01-15 18:52:15

+0

標題是列表中的第一個索引。由於該記錄不在數據庫中,dataSource.getItemId(position)無法正確執行以從DB遊標檢索_id。 – Carnivoris 2012-01-17 06:12:42

+0

哦,好的。 Thx的信息:) – 2012-01-17 16:31:23