这是可能的,但只是勉强......我真的不知道这么简单的事情怎么会变得如此可笑地复杂。
答案的关键可以在这里找到:Android:ListView selection 后保持蓝色背景
这归结为定义一个附加样式,ListView并将选择模式设置为AbsListView.CHOICE_MODE_SINGLE(如链接答案中所述)。
这允许您以编程方式使用 切换选择Listview.setItemChecked()。但是,您需要自己跟踪onItemLongClick回调中所触摸项目的索引,因为ListView.setSelection()不会这样做(至少ListView.getSelectedItem()在我所见的情况下总是会返回 -1)。
代码(为简单起见,我的片段实现了所有三个OnItemClickListener、OnItemLongClickListener和
        ActionMode.Callback):
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    this.listViewAdapter = new ListViewAdapter();
    this.root = (ListView)inflater.inflate(R.layout.fragment_bookmarks, container, false);
    this.root.setAdapter(this.listViewAdapter);
    this.root.setOnItemClickListener(this);
    this.root.setOnItemLongClickListener(this);
    this.root.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
    return this.root;
}
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
    if(this.cabMode != null)
        return false;
    this.selectedPosition = position;
    this.root.setItemChecked(position, true);
    this.root.setOnItemClickListener(null);
    this.cabMode = getActivity().startActionMode(this);
    return true;
}
最后,如果您想在 CAB 关闭时摆脱选择:
@Override
public void onDestroyActionMode(ActionMode mode) {
    cabMode = null;
    this.root.setItemChecked(this.selectedPosition, false);
    this.selectedPosition = -1;
    this.root.setOnItemClickListener(this);
}
注册和取消注册OnItemClickListener可确保当 CAB 处于活动状态时,您不会意外触发通常与项目关联的操作(如打开详细视图)。