dataSource.getItemId (position) возвращает ноль - PullRequest
0 голосов
/ 15 января 2012

Я пытаюсь получить идентификатор базы данных члена ListView, чтобы я мог передать его новому действию, но метод .getItemId (position) SimpleCursorAdapter возвращает значение null вместо _id из базы данных. Насколько я понимаю, это должно вернуть поле _id, захваченное курсором, но это не работает для меня. Буду рад некоторым предложениям

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);
          }
        });

1 Ответ

1 голос
/ 15 января 2012

Адаптер возвращал ноль из-за заголовков, добавленных

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);
          }
        });
...