从Contextual Action Bar访问ListView项目的文本

mat*_*boy 1 android android-listview android-menu android-actionbar

我需要通过长按选择访问ListView项中的文本.对于旧的Android版本,我已使用下面的代码成功完成了上下文菜单.

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
                                ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.context_menu, menu);
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    String text = ((TextView) info.targetView).getText().toString();

    switch (item.getItemId()) {
        case R.id.getText:
            getText(text);
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,对于较新的Android版本,我希望使用上下文操作栏执行此操作,但无法弄清楚如何在栏中选择项目后提取所选文本.以下代码不起作用.

    myListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
    myListView.setMultiChoiceModeListener(new MultiChoiceModeListener() {

        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
        String text = ((TextView) info.targetView).getText().toString();

            switch (item.getItemId()) {
                case R.id.contextDelete:
                    getText(text);
                    return true;;
                default:
                    return false;
            }
        }

        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            MenuInflater inflater = mode.getMenuInflater();
            inflater.inflate(R.menu.context_menu, menu);
            return true;
        }

        //Other actionmode methods...
    });
Run Code Online (Sandbox Code Playgroud)

上下文操作栏显示确定,但是当从中选择一个项目时,我在AdapterContextMenuInfo行中得到一个NullPointerException,因为这显然是针对上下文菜单而不是操作栏.也许对于Action吧有一些相同的东西吗?或者,在这种情况下如何获取ListView项目文本?谢谢.

Com*_*are 11

getCheckedItemPositions()on ListView将返回用户已检查的项目位置,getCheckedItemIds()如果您正在使用类似的东西,将返回其ID值CursorAdapter.

这是一个示例项目,演示如何使用CHOICE_MODE_MULTIPLE_MODALAPI Level 11+并回退到旧设备上下文菜单.