0

我的片段包含一个 viewpager,其中包含一个 listView

此 listView 行在左侧显示缩略图,在右侧显示一些文本。就像 gmail 应用程序一样,当我按下缩略图时,我希望它切换到操作模式。当在别处按下时,它会打开与按下的特定行相关的不同活动。这部分工作正常。

在我的适配器中,我有以下代码

viewHolder.getImage().setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(final View v) {
                documentFragments.setActionMode(true);
            }
        });

然后在我的片段中,我有以下代码

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void setActionMode(final boolean enabled) {
    if (enabled && this.actionModeEnabled) {
        return;
    }

    if (!enabled && !this.actionModeEnabled) {
        return;
    }

    this.currentAdapter.setActionModeEnabled(enabled);
    if (enabled) {
        this.listView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
        this.listView.startActionMode(new ActionMode.Callback() {

            @Override
            public boolean onPrepareActionMode(final ActionMode mode, final Menu menu) {
                return false;
            }

                @Override
                public void onDestroyActionMode(ActionMode mode) {
SOME CODE

                }

                @Override
            public boolean onCreateActionMode(final ActionMode mode, final Menu menu) {
                mode.setTitle(getActivity().getString(R.string.selectDocuments));
                getActivity().getMenuInflater().inflate(R.menu.documents_action_menu, menu);

                // force the checkbox display
                DocumentsFragment.this.currentAdapter.notifyDataSetChanged();
                return true;
            }

                @Override
                public boolean onActionItemClicked(final ActionMode mode, final MenuItem item) {
 SOME CODE
                }
            });
    } else {
        this.listView.setChoiceMode(AbsListView.CHOICE_MODE_NONE);
    }
    this.actionModeEnabled = enabled;
}

因此,当我按下缩略图时,一切正常,我在行上显示一个复选框,并且 actionMode 选项菜单显示在我正在使用的 appcompat 上。现在我想要的是按列表视图行上的任意位置来选择/取消选择行。那就是它不起作用的地方。

这是我的代码:

private void initControls() {
    this.listView = (ListView) this.view.findViewById(android.R.id.list);

    registerForContextMenu(this.listView);
    this.listView.setOnItemClickListener(this);
}

    @Override
    public void onItemClick(final AdapterView<?> parent, final View view, final int position, final long id) {
        if (this.actionModeEnabled) {
            final boolean isChecked = this.listView.isItemChecked(position);
 DO SOMETHING
        } else {
 DO SOMETHING
        }
    }

当不在 actionMode 中时 onItemClick 被调用,但一旦在 actionMode 中它不再被调用......

在操作模式下,我如何接收点击某行的信息?

4

1 回答 1

0

我用 CheckedTextView 替换了行布局中的 CheckBox,现在一切正常。

于 2014-03-12T11:40:25.637 回答