Как получить идентификатор элемента в обработчике onItemClick

У меня есть таблица категорий с двумя столбцами category_id и name. Я создал вспомогательный класс данных с именем CategoryDataHelper. У меня есть метод с именем getCategoryCursor() этого вспомогательного класса, который извлекает идентификатор и имя из таблицы категорий и возвращает курсор. Используя этот курсор, я использовал SimpleCursorAdapter для отображения списка категорий. Он работает нормально.

public class Categories extends ListActivity  {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        categoryDataHelper = new CategoryDataHelper(getApplicationContext());
        Cursor categoryCursor  = categoryDataHelper.getCategoryCursor();
        ListAdapter adapter = new SimpleCursorAdapter (
                this,  
                android.R.layout.simple_list_item_1,
                categoryCursor,                                              
                new String[] { CategoryDataHelper.NAME },           
                new int[] {android.R.id.text1});  

        // Bind to our new adapter.
        setListAdapter(adapter);

        list = getListView();
        list.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                // Here I want the category_id  
            }
        });
    }    
}

Теперь я хочу реализовать OnItemClickListener и отправить Intent с category_id выбранной категории. Как я могу получить идентификатор в методе onItemClick()?


person dev_android    schedule 05.04.2011    source источник
comment
параметр id типа long вам не помогает??   -  person Sunil Pandey    schedule 05.04.2011
comment
Чтобы получить содержимое выбранного элемента, используйте Object o=lv.getItemAtPosition(position); Объект o можно использовать для получения предметов.   -  person Kartik Domadiya    schedule 05.04.2011
comment
Что делает setListAdapter и почему он предшествует list = getListView()?   -  person Corey Sunwold    schedule 05.04.2011


Ответы (4)


Вы, вероятно, должны получить курсор от адаптера. Таким образом, если ваш курсор будет заменен, вы все равно получите действительный курсор.

Cursor cursor = ((SimpleCursorAdapter) adapterView).getCursor();
cursor.moveToPosition(position);
long categoryId = cursor.getLong(cursor.getColumnIndex(CategoryDataHelper.ID));

или используйте "category_id" или любое другое имя вашего столбца вместо CategoryDataHelper.ID.

person Matthew Willis    schedule 05.04.2011
comment
adapterView обычно не является адаптером. Это представление использует адаптер и, следовательно, имеет метод getAdapter(). Итак, в вашем примере вы должны вместо этого вызвать adapterView.getAdapter(). - person Dmitry Zaytsev; 30.01.2013
comment
Это применимо с SimpleAdapter? - person Apurva; 08.02.2015

Спасибо, Зак, я смог решить с помощью твоего поста... Отлично!!! ... Я отправляю параметр из действия в другое так:

Intent myIntent = new Intent(Clientes.this, Edc.class);
Cursor cursor = (Cursor) adapter.getItem(position);
myIntent.putExtra("CLIENTE_ID", cursor.getInt(cursor.getColumnIndex("_id")));
startActivity(myIntent);

В другом действии (EDC).... я получаю параметр так:

int _clienteId = getIntent().getIntExtra("CLIENTE_ID", 0);
person ag123    schedule 13.08.2011

Как насчет onItemclick:

categoryCursor.moveToPosition(position);

а потом из возвращенного курсора получить ID от своего хелпера?

person Matt M    schedule 05.04.2011

С SimpleCursorAdapter функция onItemClick передает идентификатор базы данных для выбранного элемента. Итак, решение просто

long category_id = id
person Jason    schedule 20.01.2016