2012-01-15 1 views
0

Я пытаюсь получить идентификатор базы данных элемента ListView, чтобы передать его новому действию, но метод .getItemId (position) SimpleCursorAdapter возвращает 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

+0

Да, текст правильно заполнен, насколько я могу сообщить – Carnivoris

+0

, на какие поля вы запрашиваете? – JoxTraex

ответ

0

Адаптер был возвращающимся нуль из заголовков, добавленных

view.setHeaderDividersEnabled(true); 
view.addHeaderView(getLayoutInflater().inflate(R.layout.row, 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? –

+0

Заголовок является первым индексом в списке. Поскольку эта запись не была в БД, dataSource.getItemId (position) не удалось выполнить правильно, чтобы извлечь _id из курсора DB. – Carnivoris

+0

oh ok. Thx для информации :) –