我正在尝试将YouTubePlayerView放入我的适配器中,但我没有成功。
我不想打电话给新的意图。我想在我的应用程序中显示视频。
我将YouTubeAndroidPlayerApi.jar放在我的文件夹libs中并查看项目属性并且一切正常(我按照tutorial}
这是我的XML代码和日志。
<LinearLayout
android:id="@+id/ll_contentExercicios_LayoutVideoGif"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<com.google.android.youtube.player.YouTubePlayerView
android:id="@+id/vv_contentExercicios_YoutubeVideo"
android:layout_width="300dp"
android:layout_height="150dp" />
<ImageView
android:id="@+id/iv_contentExercicios_GifExercicio"
android:layout_width="100dp"
android:layout_height="150dp"
android:layout_marginLeft="30dp" >
</ImageView>
</LinearLayout>
10-29 13:03:42.598: E/AndroidRuntime(4513): FATAL EXCEPTION: main
10-29 13:03:42.598: E/AndroidRuntime(4513): java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.timo.atlas/br.com.timo.atlas.PrincipalActivity}: android.view.InflateException: Binary XML file line #121: Error inflating class com.google.android.youtube.player.YouTubePlayerView
10-29 13:03:42.598: E/AndroidRuntime(4513): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)
10-29 13:03:42.598: E/AndroidRuntime(4513): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2122)
10-29 13:03:42.598: E/AndroidRuntime(4513): at android.app.ActivityThread.access$600(ActivityThread.java:140)
10-29 13:03:42.598: E/AndroidRuntime(4513): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1228)
10-29 13:03:42.598: E/AndroidRuntime(4513): at android.os.Handler.dispatchMessage(Handler.java:99)
10-29 13:03:42.598: E/AndroidRuntime(4513): at android.os.Looper.loop(Looper.java:137)
10-29 13:03:42.598: E/AndroidRuntime(4513): at android.app.ActivityThread.main(ActivityThread.java:4895)
10-29 13:03:42.598: E/AndroidRuntime(4513): at java.lang.reflect.Method.invokeNative(Native Method)
10-29 13:03:42.598: E/AndroidRuntime(4513): at java.lang.reflect.Method.invoke(Method.java:511)
10-29 13:03:42.598: E/AndroidRuntime(4513): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
10-29 13:03:42.598: E/AndroidRuntime(4513): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
10-29 13:03:42.598: E/AndroidRuntime(4513): at dalvik.system.NativeStart.main(Native Method)
10-29 13:03:42.598: E/AndroidRuntime(4513): Caused by: android.view.InflateException: Binary XML file line #121: Error inflating class com.google.android.youtube.player.YouTubePlayerView
10-29 13:03:42.598: E/AndroidRuntime(4513): at android.view.LayoutInflater.createView(LayoutInflater.java:613)
10-29 13:03:42.598: E/AndroidRuntime(4513): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
10-29 13:03:42.598: E/AndroidRuntime(4513): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
10-29 13:03:42.598: E/AndroidRuntime(4513): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
10-29 13:03:42.598: E/AndroidRuntime(4513): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
10-29 13:03:42.598: E/AndroidRuntime(4513): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
10-29 13:03:42.598: E/AndroidRuntime(4513): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
10-29 13:03:42.598: E/AndroidRuntime(4513): at br.com.timo.atlas.adapters.ExerciciosAdapter.getView(ExerciciosAdapter.java:107)
10-29 13:03:42.598: E/AndroidRuntime(4513): at br.com.timo.atlas.adapters.MusculoAdapter.getView(MusculoAdapter.java:185)
10-29 13:03:42.598: E/AndroidRuntime(4513): at br.com.timo.atlas.PrincipalActivity.onCreate(PrincipalActivity.java:275)
10-29 13:03:42.598: E/AndroidRuntime(4513): at android.app.Activity.performCreate(Activity.java:5163)
10-29 13:03:42.598: E/AndroidRuntime(4513): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
10-29 13:03:42.598: E/AndroidRuntime(4513): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2061)
10-29 13:03:42.598: E/AndroidRuntime(4513): ... 11 more
10-29 13:03:42.598: E/AndroidRuntime(4513): Caused by: java.lang.reflect.InvocationTargetException
10-29 13:03:42.598: E/AndroidRuntime(4513): at java.lang.reflect.Constructor.constructNative(Native Method)
10-29 13:03:42.598: E/AndroidRuntime(4513): at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
10-29 13:03:42.598: E/AndroidRuntime(4513): at android.view.LayoutInflater.createView(LayoutInflater.java:587)
10-29 13:03:42.598: E/AndroidRuntime(4513): ... 23 more
10-29 13:03:42.598: E/AndroidRuntime(4513): Caused by: java.lang.IllegalStateException: A YouTubePlayerView can only be created with an Activity which extends YouTubeBaseActivity as its context.
10-29 13:03:42.598: E/AndroidRuntime(4513): at com.google.android.youtube.player.YouTubePlayerView.(Unknown Source)
10-29 13:03:42.598: E/AndroidRuntime(4513): at com.google.android.youtube.player.YouTubePlayerView.(Unknown Source)
10-29 13:03:42.598: E/AndroidRuntime(4513): ... 26 more
P.S。:我正在阅读Youtube API文档,并表示有必要通过活动扩展YouTubeBaseActivity以使用YouTubePlayerView,因此我知道我需要一些方法在BaseAdapter中创建YouTubePlayerView。
谢谢和问候。
答案 0 :(得分:0)
是的,您需要扩展YouTubeBaseActivity,或者您可以使用android.support.v4中的YouTubePlayerSupportFragment和FrameActivity。
<fragment
android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment"
android:id="@+id/youtube_fragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
答案 1 :(得分:0)
YouTube在某项活动中不允许多个YouTube播放器视图。 我不知道您的要求,但您可以使用带有片段的viewpager,在A片段中,您可以使用childfragmentmanager动态地将youtubefragment添加到您的片段。
答案 2 :(得分:0)
在您的Java文件ex. MainActivity.java
中
尝试
替换public class MainActivity extends AppCompatActivity
与public class MainActivity extends YouTubeBaseActivity
答案 3 :(得分:0)
适配器中的onBindViewHolder()方法应如下所示...
@Override
public void onBindViewHolder(final VideoInfoHolder holder, final int position) {
final YouTubeThumbnailLoader.OnThumbnailLoadedListener onThumbnailLoadedListener = new YouTubeThumbnailLoader.OnThumbnailLoadedListener(){
@Override
public void onThumbnailError(YouTubeThumbnailView youTubeThumbnailView, YouTubeThumbnailLoader.ErrorReason errorReason) {
}
@Override
public void onThumbnailLoaded(YouTubeThumbnailView youTubeThumbnailView, String s) {
youTubeThumbnailView.setVisibility(View.VISIBLE);
holder.relativeLayoutOverYouTubeThumbnailView.setVisibility(View.VISIBLE);
}
};
holder.youTubeThumbnailView.initialize(Resources.KEY, new YouTubeThumbnailView.OnInitializedListener() {
@Override
public void onInitializationSuccess(YouTubeThumbnailView youTubeThumbnailView, YouTubeThumbnailLoader youTubeThumbnailLoader) {
youTubeThumbnailLoader.setVideo(VideoID[position]);
youTubeThumbnailLoader.setOnThumbnailLoadedListener(onThumbnailLoadedListener);
}
@Override
public void onInitializationFailure(YouTubeThumbnailView youTubeThumbnailView, YouTubeInitializationResult youTubeInitializationResult) {
//write something for failure
}
});
}
并在您的adapter->的viewHolder类中实现这样的onclick侦听器...
public class VideoInfoHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
protected RelativeLayout relativeLayoutOverYouTubeThumbnailView;
YouTubeThumbnailView youTubeThumbnailView;
protected ImageView playButton;
public VideoInfoHolder(View itemView) {
super(itemView);
playButton=(ImageView)itemView.findViewById(R.id.btnYoutube_player);
playButton.setOnClickListener(this);
relativeLayoutOverYouTubeThumbnailView = (RelativeLayout) itemView.findViewById(R.id.relativeLayout_over_youtube_thumbnail);
youTubeThumbnailView = (YouTubeThumbnailView) itemView.findViewById(R.id.youtube_thumbnail);
}
@Override
public void onClick(View v) {
Intent intent = YouTubeStandalonePlayer.createVideoIntent((Activity) ctx, Resources.KEY, VideoID[getLayoutPosition()]);
ctx.startActivity(intent);
}
}
首先要从
替换您的小部件`<com.google.android.youtube.player.YouTubePlayerView
android:id="@+id/vv_contentExercicios_YoutubeVideo"
android:layout_width="300dp"
android:layout_height="150dp" />`
到
`<com.google.android.youtube.player.YouTubeThumbnailView
android:id="@+id/youtube_thumbnail"
android:layout_width="match_parent"
android:layout_height="250dp"
android:scaleType="centerCrop"
android:visibility="visible"/>
`