Android CAB - 我可以在DialogFragment中启动支持操作模式

时间:2016-08-08 19:38:02

标签: android android-actionmode

CAB在AppCompatActivity中运行良好。

我也可以在DialogFragment(v4)中使用它吗?如果是这样,我应该使用什么作为启动动作模式的上下文?下一个陈述不起作用:

((AppCompatActivity) MainActivity.myActivity).startSupportActionMode( mcListener);

我知道代码已经在Dialog中了。

2 个答案:

答案 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} },并设法找到一个解决方案(对我有用):

  1. 创建了一个字段,

    private AppCompatDelegate delegate;
    
  2. 像这样覆盖onStart

    @Override
    public void onStart () {
      super.onStart();
    
      Dialog dialog = getDialog();
      if (dialog != null) delegate = AppCompatDelegate.create(dialog, this);
    }
    
  3. 并创建了一个动作模式启动方法

    @Nullable
    public ActionMode startSupportActionMode (ActionMode.Callback callback) {
      if (delegate != null) return delegate.startSupportActionMode(callback);
      return null;
    }
    
  4. 它也可以覆盖onCreateDialog并在那里创建委托,但是从DialogFragment的源getDialog方法应该返回{{1}上的相同(当前)对话框实例也是如此,所以可以在那里创建委托。