我的 XML 代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
style="@style/Container.MainBackground"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment"
android:layout_alignParentTop="true"
android:id="@+id/youtube_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>
片段中的代码
public class VideoFragment extends YouTubePlayerSupportFragment implements YouTubePlayer.OnInitializedListener {
static private final String DEVELOPER_KEY = "MyKey";
static private final String VIDEO = "ToMpzhdUD1Q";
static private final String VIDEO1 = "K77avo920Jc";
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View videoView = inflater.inflate(R.layout.video_fragment, container, false);
getActivity().setTitle("Youtube");
YouTubePlayerSupportFragment youTubePlayerSupportFragment = new YouTubePlayerSupportFragment();
youTubePlayerSupportFragment.initialize(DEVELOPER_KEY, this);
return videoView;
}
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
List<String> list = new ArrayList<>();
list.add(VIDEO);
list.add(VIDEO1);
youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);
youTubePlayer.cueVideos(list);
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
Toast.makeText(getContext(), "FAIL!" + youTubeInitializationResult.toString(), Toast.LENGTH_LONG)
.show();
}
}
在主要活动中:
getSupportFragmentManager().beginTransaction().replace(R.id.main_container,fragment).addToBackStack(null).commit();
当我尝试打开抽屉中的片段时出错:
java.lang.NullPointerException:尝试调用虚拟方法“void”
com.google.android.youtube.player.YouTubePlayerView.a()' 为空
对象引用位于
com.google.android.youtube.player.YouTubePlayerSupportFragment.onStart(未知
来源)
这里的问题是你覆盖了onCreateView()来自超类的方法YouTubePlayerSupportFragment,一个不是抽象的方法,它实际上有一个实现,如下所示:
public View onCreateView(LayoutInflater var1, ViewGroup var2, Bundle var3) {
this.c = new YouTubePlayerView(this.getActivity(), (AttributeSet)null, 0, this.a);
this.a();
return this.c;
}
实际的变量名称和类型超出了本答案的范围。
这里重要的是YouTube播放器视图在这里被实例化,并且你覆盖了该方法,所以YouTube播放器视图为 null,当在onStart()方法(也可以在YouTubePlayerSupportFragment).
public void onStart() {
super.onStart();
this.c.a();
}
因此,基本上,您唯一需要的就是实例化您的视频片段类,并且,如果您想要实际的视频,而不是黑匣子,则需要在创建片段时对其进行初始化(如下所示:)
public VideoFragment()
{
this.initialize("yourAPIKeyHere", this);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)