Как ссылаться на выбранный элемент ListView из ContextMenu?

Я реализовал контекстную панель действий (CAB) в действии, которое отображает список учетных записей. В настоящее время единственный вариант через CAB - удалить учетную запись. Однако, когда пользователь долго щелкает по учетной записи и выбирает элемент удаления, я не могу понять, как получить ссылку на выбранную учетную запись. Вот код прослушивателя кликов:

mAccountListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                if (mActionMode != null) {
                    return false;
                } else {
                    // Start the CAB using the ActionMode.Callback already defined
                    mActionMode = startSupportActionMode(mActionModeCallback);
                    // Get name to set as title for action bar
                    Account account = (Account) mAccountAdapter.getItem(position);
                    mActionMode.setTitle(account.getName());
                    mAccountListView.setSelection(position);
                    return true;
                }
            }
        });

И вот на onItemClicked:

// Called when the user selects a contextual menu item
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_delete_account:
            mode.finish(); // Action picked, so close the CAB
            return true;
        default:
            return false;
    }
}

Во второй функции выше mode.finish() Я хотел бы удалить учетную запись из базы данных, а также адаптер. Тем не менее, я не могу понять, как ссылаться на него. Я пытался:

Account acc = (Account) mAccountListView.getSelectedItem();

Но я получаю нулевое значение для учетной записи. Я также пытался использовать AdapterContextMenuInfo, но я также получаю нулевой объект при вызове item.getInfo(), Я сделал ошибку еще где? Я не хочу прибегать к хранению статической переменной, которая меняется каждый раз при выборе элемента.

1 ответ

Решение

Вы можете установить тег в ActionMode для передачи ссылки на учетную запись.

Позже просто использовать

Account acc = (Account) mode.getTag();
Другие вопросы по тегам