我有一个以DialogFragment
播放视频的应用。我已将MediaController
添加到VideoView
但是有两个问题:
MediaController
隐藏在DialogFragment
。DialogFragment
可见时,屏幕方向发生变化会导致活动出现泄漏窗口的异常
对于第一个,我尝试使用linearLayoutParent.bringChildToFront(mediaControls)
无效。我不知道如何处理第二个问题。
帮帮我。 :)
答案 0 :(得分:4)
虽然这是一个老问题,但我还在VideoView
中显示了DialogFragment
,并且MediaController
隐藏在DialogFragment
后面的问题也一样。< / p>
对于那些也在考虑做同样事情的人来说,这就是我所做的。
//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
。
答案 1 :(得分:2)
到第二点:
在片段的onCreate中尝试setRetainInstance(true)
。有了这个,片段将在Activity被破坏时存活,就像配置更改一样。如果您使用支持库,则需要这样才能真正阻止关闭片段:
@Override
public void onDestroyView() {
if (getDialog() != null && getRetainInstance())
getDialog().setDismissMessage(null);
super.onDestroyView();
}
这需要覆盖DialogFragment的dismiss侦听器。
如果您对片段中的Activity进行了调用,则相应地更新上下文/回调以跟踪对新创建的Activity的引用。因此,您可以使用onAttach()或onActivityCreated()。