Android Custom ListView выбранный элемент дочернего элемента?

У меня есть настраиваемая строка списка, содержащая несколько компонентов textView. Вместо «стандартного» отдельного текстового элемента я создал элемент, в котором каждая строка списка содержит несколько битов информации. В этом примере у меня есть идентификатор записи, имя и описание для каждой строки в списке.

У меня есть список, заполненный через

this.mDbHelper = new RecordDBAdapter(this);
this.mDbHelper.open();
Cursor c = this.mDbHelper.fetchAllRecords();
startManagingCursor(c);

String[] from = new String[] {RecordDBAdapter.ROW_ID, RecordDBAdapter.NAME, RecordDBAdapter.DESCRIPTION};

int[] to = new int[] {R.id.recordId, R.id.lblName, R.id.lblDescription};

// Now create an array adapter and set it to display using our row
SimpleCursorAdapter records =  new SimpleCursorAdapter(this, R.layout.record_row, c, from, to);

this.list.setAdapter(dives);

Теперь я хочу иметь доступ к значению recordId в каждом выбранном элементе. Я пытался следовать руководствам по Android, но безрезультатно. Они делают что-то вроде

Object o = adapter.getItemAtPosition(position);

но это тоже не помогает. Что я ДЕЙСТВИТЕЛЬНО хочу, так это получить значение recordId ВНУТРИ каждого выбранного элемента списка. Кто-нибудь знает, как это будет реализовано? Вот мое событие onItemClick:

     protected OnItemClickListener onListItemClick = new OnItemClickListener()
        {
            @Override
            public void onItemClick(AdapterView<?> adapter, View view, int position, long rowId) {

// My goal is either to grab the value of the
// recordId value from the textView, or from the adapter.
                //Object o = adapter.getItemAtPosition(position); //Tried this, no joy
                Intent intent = new Intent(NeatActivity.this, SomeOtherActivity.class);             
        //      intent.putExtra("selectedRecordId",val); //val here is a numerical record row id being passed to another activity.
                startActivity(intent);
            }       
        };

person Shawn    schedule 27.10.2010    source источник


Ответы (1)


Вы пытаетесь сделать слишком много из класса адаптера по умолчанию. Вам нужно написать свой собственный класс адаптера, расширить simplecursoradapter, а затем вы можете сделать любой метод, который вы хотите, чтобы получить все, что вы хотите, в любой позиции, которую вы хотите.

person Falmarri    schedule 27.10.2010
comment
Спасибо за ответ. Я еще новичок в java и не разобрался во всех тонкостях. Итак, вы говорите, что нет способа получить доступ к значениям ни в адаптере, ни в текстовом представлении без подкласса? Мне кажется, что эти значения будут доступны, поскольку мы передаем и адаптер, и представление обработчику onListItemCLick. Когда я размещаю выражение наблюдения, я вижу столбцы в адаптере, но не могу получить значения, хранящиеся в каждом столбце. Немного смущен тем, зачем нам нужен адаптер и представление в качестве параметров, если их нельзя использовать для извлечения значений данных? - person Shawn; 27.10.2010
comment
Я уверен, что они доступны. Просто вам, вероятно, придется сделать больше, чем должен был сделать класс. Базовые классы существуют в качестве основы. Ожидается, что вы подклассифицируете адаптеры, когда делаете что-то большее, чем просто отображение значений. - person Falmarri; 27.10.2010