gpt4 book ai didi

java - 无法在同一 Activity 中创建多个 YoutubePlayerFragment

转载 作者:行者123 更新时间:2023-12-02 03:16:45 24 4
gpt4 key购买 nike

Activity 的相关部分:

 @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) {

}
});

预期的结果是让两个 fragment 各有一个视频,并且彼此独立。

我面临的问题是每个 fragment 都没有视频,也不是独立的。两者一起加载,并且在其中一个 fragment 中完成的所有操作(按播放或暂停)完全改变了另一个 fragment 中发生的情况。

此 Activity 的计划功能是显示视频源,供用户按下播放按钮并单独观看每个视频,但如上所述,这是不可能的,因为 fragment 完全相互破坏。

我可以做些什么来解决问题?

//编辑R.layout.activity_sub_item:

<?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>

最佳答案

无论 fragment 如何,您的两个视频当前都通过此 youTubePlayer 实例加载。有一个 YouTubePlayer 实例,您可以通过 onInitializationSuccess 使用每个 YouTubePlayer.OnInitializedListener 的方法。

我正在更改您加载一个 YouTubeFragment 的 loadTopico 方法。相应地更改第二个 fragment 。

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 的多个实例。相反,仅在需要时才初始化它们。

参见thisthis了解更多相关信息。

关于java - 无法在同一 Activity 中创建多个 YoutubePlayerFragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40200162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com