在我的Android应用程序中,我有一个图像,GIF和视频的feedwall。对于播放视频我正在使用Android YouTube api播放YouTube链接(URL)中的视频。 feedwall是一个使用基本适配器的列表视图。对于视频,我使用的是FrameLayout,它包含在RelativeLayout中,如下所示
<RelativeLayout
android:id="@+id/feedVideoRelLayout"
android:layout_width="wrap_content"
android:layout_height="300dp">
<FrameLayout
android:id="@+id/youTubePlayerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
我将此Framelayout转换为YouTubePlayerSupportFragment,如下所示
YouTubePlayerSupportFragment youTubePlayerLayout;
viewHolder.youTubePlayerLayout = (YouTubePlayerSupportFragment) activityRef.getSupportFragmentManager().findFragmentById(R.id.youTubePlayerLayout);
现在我在我的feedwall中播放视频,在我正在使用的适配器的getView方法中
viewHolder.youTubePlayerLayout = YouTubePlayerSupportFragment.newInstance();
FragmentTransaction transaction;
transaction = activityRef.getSupportFragmentManager().beginTransaction();
transaction.add(R.id.youTubePlayerLayout, viewHolder.youTubePlayerLayout).commit();
viewHolder.youTubePlayerLayout.initialize(DeveloperKey.DEVELOPER_KEY, new YouTubePlayer.OnInitializedListener() {
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) {
if (!wasRestored) {
player.loadVideo(Utils.getYouTubeVideoIdFromUrl(feedModelArrayList.get(position).getPostMediaURL()));
player.setShowFullscreenButton(false);
player.play();
}
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider arg0, YouTubeInitializationResult arg1) {
String errorMessage = arg0.toString();
Toast.makeText(activityRef, errorMessage, Toast.LENGTH_LONG).show();
Log.d("errorMessage:", errorMessage);
}
});
在我的Feedwall中,只要检测到视频链接,视频就会在YouTube播放器中播放。现在问题是,这种情况只是第一次发生。 向下滚动后如果再次检测到视频链接,则播放器加载视频但在播放后立即停止,在一秒钟内。其次,即使点击播放按钮,成功播放的第一个视频也会表现相同。
在logcat中我收到类似
的警告 W/YouTubeAndroidPlayerAPI: YouTube video playback stopped due to unauthorized overlay on top of player. The YouTubePlayerView is not contained inside its ancestor android.widget.FrameLayout{d56f6d9 V.E...... ......I. 0,0-0,0}. The distances between the ancestor's edges and that of the YouTubePlayerView is: left: 0, top: 0, right: 0, bottom: 0 (these should all be positive).
我在SO上经历了与此警告相关的所有线程,但不幸的是,它们都没有用。