如何刷新ListView中的Youtube Player View onItemClickListener()

Sop*_*hie 21 youtube video android youtube-api android-listview

我可以使用Youtube视频,cuePlaylist()但我也希望允许用户点击任何列表项,然后我想刷新YoutubePlayerView视频用户只需点击

我正在使用cuePlaylist()以前的和下一个按钮作为Youtube播放器的默认功能

那么我可以YoutubePlayerView用我选择的那个刷新ListView吗?

这是我的完整代码,当我点击任何列表项时,没有得到任何更改YoutubePlayerView但能够Log视频ID我刚刚点击了ListView...

        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);
        }

    }
Run Code Online (Sandbox Code Playgroud)

Uma*_*shi 9

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

YouTubePlayerFragment youTubePlayerFragment = YouTubePlayerFragment.newInstance();
    youTubePlayerFragment.initialize(API_KEY, this);
Run Code Online (Sandbox Code Playgroud)

在Activity中实现的初始化侦听器中,您应该将YoutubePlayer的引用保留在类级别属性中

 //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;
    }

}
Run Code Online (Sandbox Code Playgroud)

并使用此播放器属性在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();
        }

    }
});
Run Code Online (Sandbox Code Playgroud)