Как передать идентификатор элемента listview в ActionMode.Обратный вызов?

#java #android #contextmenu #contextual-action-bar #actionmode

#java #Android #contextmenu #контекстная панель действий #actionmode

Вопрос:

Я пытаюсь удалить строку из базы данных, когда нажимаю «Удалить» в контекстной панели действий.Но я не могу получить идентификатор элемента, на который долго нажимается.Я пытался использовать setTag() для передачи идентификатора, но при длительном нажатии на элемент приложение принудительно закрывается.

Вот мой код:

 listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view,
                int position, long id) {
            // TODO Auto-generated method stub
            startActionMode(modeCallBack);
            mActionMode.setTag(id);
            view.setSelected(true);
            return true;
        }
    });
  

Это onActionItemClicked :

 @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        // TODO Auto-generated method stub
        switch (item.getItemId()) {
        case R.id.item_delete:
            Mydatabase.execSQL("delete from TableName where _id="
                      mode.getTag());
            mode.finish();
            break;
        }
        return true;
    }
};
  

Ответ №1:

Если у вас есть элементы в массиве, и вы долго нажимаете на что-то, позиция, которая передается в

     public boolean onItemLongClick(AdapterView<?> parent, View view,
            int position, long id)
  

Должен быть индекс элемента в массиве, предполагая, что у вас есть идентификатор, хранящийся там, вы можете просто передать этот идентификатор SQL-запросу, который удалит элемент из вашей базы данных.