我有一个可以播放视频的应用程序DialogFragment
。我已经添加MediaController
到VideoView
但是有两个问题:
MediaController
隐藏在后面DialogFragment
。DialogFragment
会导致 Activity 有泄漏窗口的异常对于第一个,我尝试使用linearLayoutParent.bringChildToFront(mediaControls)
which 不起作用。我不知道如何处理第二个。
帮帮我。:)
我有一个可以播放视频的应用程序DialogFragment
。我已经添加MediaController
到VideoView
但是有两个问题:
MediaController
隐藏在后面DialogFragment
。DialogFragment
会导致 Activity 有泄漏窗口的异常对于第一个,我尝试使用linearLayoutParent.bringChildToFront(mediaControls)
which 不起作用。我不知道如何处理第二个。
帮帮我。:)
虽然这是一个老问题,但我也在 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.onClickListener
以VideoView
添加和删除MediaController
.
你的第二点:
尝试setRetainInstance(true)
在片段的 onCreate 中。有了这个,Fragment 将在 Activity 被破坏时存活下来,就像在配置更改时一样。如果您使用的是支持库,您将需要它来真正防止关闭您的片段:
@Override
public void onDestroyView() {
if (getDialog() != null && getRetainInstance())
getDialog().setDismissMessage(null);
super.onDestroyView();
}
这是覆盖 DialogFragment 的关闭侦听器所必需的。
如果您从 Fragment 调用 Activity,则相应地更新上下文/回调以跟踪对新创建的 Activity 的引用。因此,您可以使用 onAttach() 或 onActivityCreated()。