我的片段包含一个 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 中它不再被调用......
在操作模式下,我如何接收点击某行的信息?