0

我有一个可以播放视频的应用程序DialogFragment。我已经添加MediaControllerVideoView但是有两个问题:

  • MediaController隐藏在后面DialogFragment
  • 可见时更改屏幕方向DialogFragment会导致 Activity 有泄漏窗口的异常
  • 对于第一个,我尝试使用linearLayoutParent.bringChildToFront(mediaControls)which 不起作用。我不知道如何处理第二个。

    帮帮我。:)

    4

    2 回答 2

    5

    虽然这是一个老问题,但我也在 aVideoView中显示 aDialogFragment并且遇到了同样的问题,即MediaController隐藏在DialogFragment.

    对于任何也在考虑这样做的人,这就是我所做的。

    //Remove the mediaController from it's parent view.
    ((ViewGroup) mediaController.getParent()).removeView(mediaController);
    //Add the mediaController to a FrameLayout within your DialogFragment.
    ((FrameLayout) findViewById(R.id.controlsWrapper)).addView(mediaController);
    

    只需确保您FrameLayout填充屏幕的宽度,并将重力设置为屏幕底部。

    另请注意,点击VideoView不会显示和隐藏MediaController(出于某种原因)。

    因此,您需要在 中添加一个View.onClickListenerVideoView添加和删除MediaController.

    于 2014-08-10T09:13:38.660 回答
    2

    你的第二点:

    尝试setRetainInstance(true)在片段的 onCreate 中。有了这个,Fragment 将在 Activity 被破坏时存活下来,就像在配置更改时一样。如果您使用的是支持库,您将需要它来真正防止关闭您的片段:

     @Override
     public void onDestroyView() {
         if (getDialog() != null && getRetainInstance())
             getDialog().setDismissMessage(null);
             super.onDestroyView();
     }
    

    这是覆盖 DialogFragment 的关闭侦听器所必需的。

    如果您从 Fragment 调用 Activity,则相应地更新上下文/回调以跟踪对新创建的 Activity 的引用。因此,您可以使用 onAttach() 或 onActivityCreated()。

    于 2013-08-10T15:58:03.633 回答