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 onYoutubePlayerFragment
,使用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();
}
}
});