我通过为每个片段创建一个新对话框解决了我最初的问题。使用静态对话框不知何故弄乱了我的文本选择。但这太糟糕了,因为我现在每次启动 DialogFragment 时都必须进行大量调整。
现在对于我的一般问题,我通过将 ActionMode 回调设置到我的适配器的每个 convertView 来解决这个问题。onCreateActionMode
这样我就可以在获取对模式 ( ) 的引用和清除引用 ( )之间的任何时间关闭 ActionMode onDestroyActionMode
。这是代码:
public ActionMode mActionMode;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// (Re)Use the convertView
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.popup_list_item, parent, false);
holder = new ViewHolder();
holder.textView = (TextView) convertView.findViewById(R.id.popupItem);
holder.textView.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mActionMode = mode;
// Can now use the mode whenever (if it's not null)
// e.g. call mActionMode.finish()
return true; // true = create the ActionMode
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
mActionMode = null;
}
});
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
// Set text
if (mQuery != null)
holder.textView.setText(Html.fromHtml(getItem(position)));
else
holder.textView.setText(getItem(position));
return convertView;
}
但是我未能解决我最初的问题(即使在能够手动关闭 ActionMode 之后),所以我被迫放弃使用静态对话框。
如果有人有任何建议,我愿意接受有关如何解决我最初的问题的建议。