Как получить идентификатор элемента в обработчике onItemClick - PullRequest
5 голосов
/ 05 апреля 2011

У меня есть таблица категорий с двумя столбцами 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 и отправить намерение с category_id выбранной категории.Как я могу получить идентификатор в методе onItemClick()?

Ответы [ 4 ]

17 голосов
/ 05 апреля 2011

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

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

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

3 голосов
/ 13 августа 2011

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

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);
1 голос
/ 20 января 2016

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

long category_id = id
1 голос
/ 05 апреля 2011

Как насчет onItemclick:

categoryCursor.moveToPosition(position);

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

...