我正在尝试继续播放YouTubePlayerFragment
方向更改。
代码如下所示:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
FrameLayout frameLayout = new FrameLayout(getActivity());
populateViewForOrientation(inflater, frameLayout);
return frameLayout;
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
LayoutInflater inflater = LayoutInflater.from(getActivity());
populateViewForOrientation(inflater, (ViewGroup) getView());
}
private void populateViewForOrientation(LayoutInflater inflater, ViewGroup viewGroup) {
viewGroup.removeAllViewsInLayout();
rootView = inflater.inflate(getLayoutResId(), viewGroup);
ButterKnife.bind(this, rootView);
if (frYTube != null) {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.frame, frYTube);
transaction.commitAllowingStateLoss();
}
}
片段被替换(我看到它上面的文字)和音乐正在播放但不是视频 - 黑屏。
我怎么处理它?有可能恢复视频吗?顺便说一句,如果旋转后下一个视频是oppenes - 视频出现。
我试图拨打pause
和play
来获取当前视频 - 它没有任何帮助。
我没有尝试YouTubePlayerView
,因为我使用moxy
所以我需要处理片段。
UPD
看起来创建自定义视图,其中YouTubePlayerFragment
内部具有更稳定的行为(然后删除添加视图)。但黑屏问题仍然存在。
在这种情况下可以通过以下方式恢复视频:
mYouTubePlayer.loadVideo(url);
...
public void onLoaded(String s) {
mYouTubePlayer.seekToMillis(mills);
但是没有意义重载视频,我试图避免这种情况 - 延迟出现
答案 0 :(得分:1)
根据此post,确保在还原过程中调用YouTubePlayerView
而不是显式创建时初始化onCreate()
中的onCreate()
。这里是tutorial,其中包含片段的活动不需要扩展任何特殊的基类。
您还可以查看此相关主题:Screen orientation not working with youtubePlayerfragment
答案 1 :(得分:1)
快速简便的解决方案是在您的视频活动中添加以下内容:
android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
我有一个应用程序将其用于视频,它运行得很好。一切都在方向改变时正确布局,活动和片段实例不会被拆除,从而无缝继续播放。
如果您希望拆除/重新创建活动,同时保留片段实例,请重新阅读 setRetainInstance()的文档。
要使其正常工作,您需要注意一些微妙的细微差别: https://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)
使用它会在方向更改后继续播放片段
答案 2 :(得分:0)
我发现的唯一方法是手动处理屏幕方向:
1)添加到您的活动中:
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
2)在活动类中:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
someFunctionToHandleOrienttion();
}
你不应该夸大新的布局。只需删除并重新创建/添加除youtubeframe
之外的所有内容,以使您想要的土地布局。它有点棘手和奇怪,但在其他情况下,你有黑屏而不是视频。