在片段

时间:2016-02-08 12:49:38

标签: android android-fragments youtube master-detail

我在平板电脑中使用 Master / Detail 布局,在左侧几个按钮上打开几个片段,其中一个片段包含youtube播放器。

问题,

当youtube播放器全屏显示时,按下后退按钮,将调用活动 onBackPressed,并关闭整个活动。

我尝试了什么,

1-在KeyListener上添加父片段(包含Youtube片段)并在单击后退按钮时处理,但仅当播放器不是全屏时才调用此侦听器,否则不调用它,

rootView.setFocusableInTouchMode(true);
        rootView.requestFocus();
        rootView.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
                    try {
                        // Close full screen
                        return true;
                    } catch (Exception e) {
                        AHHExceptionHandler.handleException(e);
                    }
                }
                return false;
            }
        });

2-添加onKeyListener到youtubeFragment查看是否全屏,然后关闭全屏模式

youTubeFragment.getView().setFocusableInTouchMode(true);
youTubeFragment.getView().requestFocus();
    youTubeFragment.getView().setOnKeyListener(new View.OnKeyListener() {
                                                @Override
                                                public boolean onKey(View v, int keyCode, KeyEvent event) {
                                                    if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
                                                        try {
                                                            youTubePlayer.setFullscreen(false);
                                                            return true;
                                                        } catch (Exception e) {
                                                            AHHExceptionHandler.handleException(e);
                                                        }
                                                    }
                                                    return false;
                                                }
                                            });

在所有情况下都不会调用它。

当youtube播放器处于全屏模式时,我需要处理硬件后退按钮,全屏模式关闭,应用程序处于以前的状态。

感谢。

编辑1: - 我想在片段中处理这个,而不是在父Activity中处理它,我已经在父活动中处理它了,但我不喜欢这个解决方案。

2 个答案:

答案 0 :(得分:4)

只是添加安德烈的回复。

在您的父级活动中添加:

public YouTubePlayer youTubePlayer;
public boolean isYouTubePlayerFullScreen;

在您的片段中添加:

MainActivity mainActivity = (MainActivity) getActivity();

然后,在YouTubePlayerFragment初始化:

    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean b) {
        mainActivity.youTubePlayer = player;
        player.loadVideo(videoId);

        player.setOnFullscreenListener(new YouTubePlayer.OnFullscreenListener() {
            @Override
            public void onFullscreen(boolean b) {
                mainActivity.isYouTubePlayerFullScreen = b;
            }
        });

    }

现在,Activity可以访问YouTubePlayer以及播放器是否为全屏的信息。

接下来,在Activity内,覆盖onBackPressed,如下所示:

@Override
public void onBackPressed() {
    if (youTubePlayer != null && isYouTubePlayerFullScreen){
            youTubePlayer.setFullscreen(false);
    } else {
        super.onBackPressed();
    }
}

答案 1 :(得分:2)

您可以在活动中覆盖onBackPressed(),如果您的播放器处于全屏状态,您可以按照以下方式处理:

@Override
public void onBackPressed() {

    if (youtubePlayer != null && isFullscreen) {
        // if fullscreen, set fullscreen false
        youtubePlayer.setFullscreen(false);

    } else {
        // if NOT fullscreen, perform default call on back press
        super.onBackPressed();
    }
}
  

P.S。在上面的代码片段中,isFullscreen是我们的实例变量   活动并从内部与youtubePlayer州同步   在<{1}}上设置 OnFullscreenListener

     

希望有道理:)