2012-01-15 20 views
0

私は新しいアクティビティに渡すことができるようにListViewメンバのデータベースIDを取得しようとしていますが、SimpleCursorAdapterの.getItemId(position)メソッドはnullを返していますデータベースからの_id。これは、カーソルによって取得された_idフィールドを返すべきであるとの私の理解でしたが、それは私のために働いていません。アダプタが原因dataSource.getItemId(position)がnullを返します

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

で追加されたヘッダの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

RID.idTextに_idがマッピングされていますか? – nandeesh

+0

はい、テキストが正しく入力されていれば、どのフィールドをクエリしていますかを – Carnivoris

+0

に伝えることができます。 – JoxTraex

答えて

0

を大好きだ私はまた、カーソルから直接自分のデータを取得し始めました。問題を修正した完全な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を返すようにしたのはなぜですか? –

+0

ヘッダーはリストの最初のインデックスです。そのレコードはDBにないので、dataSource.getItemId(position)はDBカーソルから_idを検索するために正しく実行できませんでした。 – Carnivoris

+0

よろしいですか?情報のためのTHX :) –

関連する問題