Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在ListView中刷新Youtube播放器视图_Android_Video_Android Listview_Youtube_Youtube Api - Fatal编程技术网

Android 如何在ListView中刷新Youtube播放器视图

Android 如何在ListView中刷新Youtube播放器视图,android,video,android-listview,youtube,youtube-api,Android,Video,Android Listview,Youtube,Youtube Api,我可以使用cuePlaylist()播放Youtube视频,但我还想允许用户点击任何列表项,然后我想用刚刚点击的视频用户刷新YoutubePlayerView 我使用的是cuePlaylist(),因此获得上一个和下一个按钮作为Youtube播放器的默认功能 因此,我可以用我在列表视图中选择的视图刷新YoutubePlayerView 这是我的完整代码,当我点击任何列表项时,在YoutubePlayerView中没有得到任何更改,但能够Log我刚刚在列表视图中单击的视频Id li

我可以使用
cuePlaylist()
播放Youtube视频,但我还想允许用户点击任何列表项,然后我想用刚刚点击的视频用户刷新
YoutubePlayerView

我使用的是
cuePlaylist()
,因此获得上一个和下一个按钮作为Youtube播放器的默认功能

因此,我可以用我在
列表视图中选择的视图刷新
YoutubePlayerView

这是我的完整代码,当我点击任何列表项时,在
YoutubePlayerView
中没有得到任何更改,但能够
Log
我刚刚在
列表视图中单击的视频Id

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            strVideoID = flowerList.get(i).getUrl();
            Log.d("url:", strVideoID); // getting particular video id

            youTubePlayerFragment.initialize(API_KEY, new YouTubePlayer.OnInitializedListener() {

                // YouTubeプレーヤーの初期化成功
                @Override
                public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) {
                    if (!wasRestored) {
                        player.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);
                        player.loadVideo(strVideoID);
                        player.play();
                    }
                }

                // YouTubeプレーヤーの初期化失敗
                @Override
                public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult error) {
                    // YouTube error
                    String errorMessage = error.toString();
                    Toast.makeText(MainActivity.this, errorMessage, Toast.LENGTH_LONG).show();
                    Log.d("errorMessage:", errorMessage);
                }
            });

        }
    });

    }

    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {

        if (!b) {
            youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);
            youTubePlayer.cuePlaylist(PLAYLIST_ID);
        }

    }
listView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
strVideoID=flowerList.get(i).getUrl();
Log.d(“url:,strVideoID);//获取特定的视频id
初始化(API_键,新的YouTubePlayer.OnInitializedListener(){
//YouTubeプレーヤーの初期化成功
@凌驾
public void onInitializationSuccess(YouTubePlayer.Provider提供程序、YouTubePlayer播放器、布尔值已还原){
如果(!已还原){
player.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);
player.loadVideo(strVideoID);
player.play();
}
}
//YouTubeプレーヤーの初期化失敗
@凌驾
public void onInitializationFailure(YouTubePlayer.Provider提供程序,YouTubeInitializationResult错误){
//YouTube错误
String errorMessage=error.toString();
Toast.makeText(MainActivity.this、errorMessage、Toast.LENGTH_LONG.show();
Log.d(“errorMessage:,errorMessage”);
}
});
}
});
}
@凌驾
public void onInitializationSuccess(youtubeplyer.Provider提供程序、youtubeplyer youtubeplyer、布尔b){
如果(!b){
youTubePlayer.setPlayerStyle(youTubePlayer.PlayerStyle.DEFAULT);
youtubeplyer.cuePlaylist(PLAYLIST_ID);
}
}

播放任何YouTube视频的步骤

1在xml文件中创建YouTube视图

<com.google.android.youtube.player.YouTubePlayerView
                android:id="@+id/youtube_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="30dp" />

您在这里使用的方法是错误的,您不需要每次调用initialize on
YoutubePlayerFragment
,使用onCreate方法完成的第一次初始化就足够了

YouTubePlayerFragment youTubePlayerFragment = YouTubePlayerFragment.newInstance();
    youTubePlayerFragment.initialize(API_KEY, this);
在Activity中实现的初始化侦听器中,应该在类级属性中保留youtubeplyer的引用,如下所示

 //your class level attribute to keep reference of player
   YouTubePlayer mYoutubePlayer;

@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {

    if (!b) {
        youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);
        youTubePlayer.cuePlaylist(PLAYLIST_ID);
        //Save reference of initialized player in class level attribute
         mYoutubePlayer = youTubePlayer;
    }

}
并使用此播放器属性在onItemClick中加载视频,而不是使用新的侦听器在YoutubePlayerFragment上再次调用initialize

 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

        strVideoID = flowerList.get(i).getUrl();
        Log.d("url:", strVideoID); // getting particular video id
        if(mYoutubePlayer!=null){
        mYoutubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);
        mYoutubePlayer.loadVideo(strVideoID);
        mYoutubePlayer.play();
        }

    }
});
listView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
strVideoID=flowerList.get(i).getUrl();
Log.d(“url:,strVideoID);//获取特定的视频id
if(mYoutubePlayer!=null){
mYoutubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);
mYoutubePlayer.loadVideo(strVideoID);
mYoutubePlayer.play();
}
}
});

尝试使用strVideoID=flowerList.get(i-1.getUrl();而不是strVideoID=flowerList.get(i).getUrl();把我换成我-1@MaheshwarLigade但为什么当我点击列表项时会得到准确的视频id,问题是我无法播放我在列表中点击的视频i因为数组索引从0到n开始,这就是为什么我认为索引应该存在问题。正如你在OP.@sophie中提到的,我和你有相同的问题。你能帮我确定你使用YouTubePlayerView播放特定视频或使用其他视图播放视频吗?我现在下载它,我可以看到视频。好的,那么你的视频视图默认设置中是否有任何类型的“上一个”或“下一个”按钮,或者你是否添加了自定义的“上一个”按钮还是视频视图上的“下一步”按钮?非常感谢,现在当我点击列表项时,它会播放特定的视频,但不会显示播放列表功能(我的平均上一个和下一个),这是我最关心的问题。我已将您的答案勾选为有用,但无法接受,因为我需要播放列表功能。。我如何将播放列表ID与YOUTUBE视频ID一起传递检查:@Sophie虽然我的答案解决了您当前提到的问题,您也在您的侦听器中使用了“player.loadVideo(strvideo);”,并且您提到的第二个问题不在其范围之内,但我也回答了您的第二个问题。
 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

        strVideoID = flowerList.get(i).getUrl();
        Log.d("url:", strVideoID); // getting particular video id
        if(mYoutubePlayer!=null){
        mYoutubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);
        mYoutubePlayer.loadVideo(strVideoID);
        mYoutubePlayer.play();
        }

    }
});