DialogFragment与屏幕方向和MediaController有关

时间:2013-08-10 15:44:59

标签: android android-dialogfragment mediacontroller

我有一个以DialogFragment播放视频的应用。我已将MediaController添加到VideoView但是有两个问题:

  • MediaController隐藏在DialogFragment
  • 后面
  • DialogFragment可见时,屏幕方向发生变化会导致活动出现泄漏窗口的异常
  • 对于第一个,我尝试使用linearLayoutParent.bringChildToFront(mediaControls)无效。我不知道如何处理第二个问题。

    帮帮我。 :)

    2 个答案:

    答案 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()。