Java 无法在同一活动中创建多个YoutubePlayerFragment
活动的相关部分:Java 无法在同一活动中创建多个YoutubePlayerFragment,java,android,android-fragments,youtube-data-api,android-youtube-api,Java,Android,Android Fragments,Youtube Data Api,Android Youtube Api,活动的相关部分: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sub_item); loadTopico(); } private void loadTopico() { YouTubePlayerFragment mainVide
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sub_item);
loadTopico();
}
private void loadTopico() {
YouTubePlayerFragment mainVideo = (YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.main_video);
mainVideo.initialize(Config.YOUTUBE_API, new YouTubePlayer.OnInitializedListener() {
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
youTubePlayer.cueVide(getResources().getString(R.string.principal_funcoes));
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
}
});
YouTubePlayerFragment secondVideo = (YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.secondVideo);
secondVideo .initialize(Config.YOUTUBE_API, new YouTubePlayer.OnInitializedListener() {
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
youTubePlayer.cueVideo(getResources().getString(R.string.secundario));
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
}
});
预期的结果是两个片段各有一个视频,并且彼此独立
我面临的问题是,这些片段既没有各自的视频,也不是独立的。两个片段一起加载,其中一个片段中所做的一切(按play或pause)都会完全改变另一个片段中发生的事情
此活动的计划功能是显示视频提要,供用户按play键并单独观看每个视频,但如上所述,这是不可能的,因为片段彼此完全破坏
我能做些什么来解决这个问题
//编辑
R.布局.活动子项:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="kerooker.me.matematicando.SubItem"
android:id="@+id/mainRelative">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<fragment
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:name="com.google.android.youtube.player.YouTubePlayerFragment"
android:layout_below="@+id/textoAssista"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:id="@+id/main_video" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/texto_assista"
android:id="@+id/textoAssista"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="25dp"
android:layout_marginLeft="10dp"
android:textSize="18sp" />
<fragment
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:name="com.google.android.youtube.player.YouTubePlayerFragment"
android:layout_below="@+id/main_video"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:id="@+id/secondary_video" />
</RelativeLayout>
您的两个视频当前正在加载此
youTubePlayer
实例,而不考虑片段。有一个YouTubePlayer实例,您可以通过每个YouTubePlayer.OnInitializedListener的方法使用它
我正在更改loadTopico方法,即加载一个YouTubeFragment。相应地更改第二个片段
private void loadTopico() {
YouTubePlayerFragment mainVideo = (YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.main_video);
mainVideo.initialize(Config.YOUTUBE_API, new YouTubePlayer.OnInitializedListener() {
@Override
public abstract void onInitializationSuccess (YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored){
player.cueVideo(getResources().getString(R.string.principal_funcoes));
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
}
});
}
更新
好的,我已经做了一些挖掘,显然你不能初始化YouTubePlayerFragment的多个实例,因为它在后台使用了一个单例模式,这基本上意味着如果你要实例化多个YouTubePlayerFragment对象,你只会得到同一个实例两次。因此,您在所有实例中看到相同行为的原因
解决方法不是一次性实例化YouTubePlayerFragment的多个实例。相反,只在需要时初始化它们
请参阅并了解有关此的更多信息 您的两个视频当前正在加载此youTubePlayer
实例,而不考虑片段。有一个YouTubePlayer实例,您可以通过每个YouTubePlayer.OnInitializedListener的方法使用它
我正在更改loadTopico方法,即加载一个YouTubeFragment。相应地更改第二个片段
private void loadTopico() {
YouTubePlayerFragment mainVideo = (YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.main_video);
mainVideo.initialize(Config.YOUTUBE_API, new YouTubePlayer.OnInitializedListener() {
@Override
public abstract void onInitializationSuccess (YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored){
player.cueVideo(getResources().getString(R.string.principal_funcoes));
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
}
});
}
更新
好的,我已经做了一些挖掘,显然你不能初始化YouTubePlayerFragment的多个实例,因为它在后台使用了一个单例模式,这基本上意味着如果你要实例化多个YouTubePlayerFragment对象,你只会得到同一个实例两次。因此,您在所有实例中看到相同行为的原因
解决方法不是一次性实例化YouTubePlayerFragment的多个实例。相反,只在需要时初始化它们
请参阅并了解有关此的更多信息 但是这两个片段都有自己的OnInitializedListener,youtubeplayer的实例怎么可能是相同的呢?对不起,我的代码有点不正确。我编辑了它,因此它与我的java代码完全相同。问题还在这里,真奇怪。你能发布R.layout.activity\u sub\u item
的代码吗?youtube播放器似乎不是独立的,因为当我在其中一个中按“播放”时,另一个也会做出反应。这确实是反直觉的。但两个片段都有自己的OnInitializedListener,youtube播放器的实例怎么可能是相同的?对不起,我的密码有点错误。我编辑了它,因此它与我的java代码完全相同。问题还在这里,真奇怪。你能把R.layout.activity\u sub\u item
的代码也贴出来吗?youtube播放器似乎不是独立的,因为当我在其中一个上按“播放”时,另一个也会做出反应。这确实违反直觉