CAB在AppCompatActivity中运行良好。
我也可以在DialogFragment(v4)中使用它吗?如果是这样,我应该使用什么作为启动动作模式的上下文?下一个陈述不起作用:
((AppCompatActivity) MainActivity.myActivity).startSupportActionMode( mcListener);
我知道代码已经在Dialog中了。
答案 0 :(得分:1)
找到适用于所有API级别的答案:
Dialog dialog;
ActionMode.Callback actionMode;
Window window = dialog.getWindow();
View toplevel = window.getDecorView();
if (toplevel == null) { return; }
toplevel.startActionMode (actionMode);
受到MandisaW创建的答案的启发。
答案 1 :(得分:1)
在当前活动中启动操作模式会显示对话框后面的操作栏,因此在不解除操作的情况下无法访问。
经过多次试验以避免这种情况后,我看了{{3} },并设法找到一个解决方案(对我有用):
创建了一个字段,
private AppCompatDelegate delegate;
像这样覆盖onStart
:
@Override
public void onStart () {
super.onStart();
Dialog dialog = getDialog();
if (dialog != null) delegate = AppCompatDelegate.create(dialog, this);
}
并创建了一个动作模式启动方法
@Nullable
public ActionMode startSupportActionMode (ActionMode.Callback callback) {
if (delegate != null) return delegate.startSupportActionMode(callback);
return null;
}
它也可以覆盖onCreateDialog
并在那里创建委托,但是从DialogFragment
的源getDialog
方法应该返回{{1}上的相同(当前)对话框实例也是如此,所以可以在那里创建委托。