Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.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_Youtube Api - Fatal编程技术网

Android 在listview中播放youtube视频列表

Android 在listview中播放youtube视频列表,android,youtube-api,Android,Youtube Api,我在youtube视频的播放列表中遇到了问题。让我解释一下,我有一个片段放在listview上。在该列表中,每个项都有单独的子视图。我被放置在标签上,并尝试放置片段。在这两种情况下,我都得到了一个异常。请告诉我解决我问题的办法 Process: com.example.sampleexamplefor_recyclerview, PID: 6510 android.view.InflateException: Binary XML file line #28: Error inflati

我在youtube视频的播放列表中遇到了问题。让我解释一下,我有一个片段放在listview上。在该列表中,每个项都有单独的子视图。我被放置在
标签上,并尝试放置片段。在这两种情况下,我都得到了一个异常。请告诉我解决我问题的办法

Process: com.example.sampleexamplefor_recyclerview, PID: 6510
    android.view.InflateException: Binary XML file line #28: Error inflating class com.google.android.youtube.player.YouTubePlayerView
            at android.view.LayoutInflater.createView(LayoutInflater.java:633)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
            at com.example.sampleexamplefor_recyclerview.RecyclerAdapter.onCreateViewHolder(RecyclerAdapter.java:40)
            at com.example.sampleexamplefor_recyclerview.RecyclerAdapter.onCreateViewHolder(RecyclerAdapter.java:24)
            at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5288)
            at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4551)
            at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4461)
            at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1962)
            at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1371)
            at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1334)
            at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:563)
            at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2847)
            at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3145)
            at android.view.View.layout(View.java:15684)
            at android.view.ViewGroup.layout(ViewGroup.java:4981)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
            at android.view.View.layout(View.java:15684)
            at android.view.ViewGroup.layout(ViewGroup.java:4981)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
            at android.view.View.layout(View.java:15684)
            at android.view.ViewGroup.layout(ViewGroup.java:4981)
            at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:494)
            at android.view.View.layout(View.java:15684)
            at android.view.ViewGroup.layout(ViewGroup.java:4981)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
            at android.view.View.layout(View.java:15684)
            at android.view.ViewGroup.layout(ViewGroup.java:4981)
            at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2186)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1920)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1106)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6018)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:792)
            at android.view.Choreographer.doCallbacks(Choreographer.java:596)
            at android.view.Choreographer.doFrame(Choreographer.java:557)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:778)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:155)
            at android.app.ActivityThread.main(ActivityThread.java:5696)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
     Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Constructor.newInstance(Native Method)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
            at android.view.LayoutInflater.createView(LayoutInflater.java:607)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
            at com.example.sampleexamplefor_recyclerview.RecyclerAdapter.onCreateViewHolder(RecyclerAdapter.java:40)
            at com.example.sampleexamplefor_recyclerview.RecyclerAdapter.onCreateViewHolder(RecyclerAdapter.java:24)
            at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5288)
            at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4551)
            at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4461)
            at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1962)
            at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1371)
            at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1334)
            at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:563)
            at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2847)
            at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3145)
            at android.view.View.layout(View.java:15684)
            at android.view.ViewGroup.layout(ViewGroup.java:4981)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
            at android.view.View.layout(View.java:15684)
            at android.view.ViewGroup.layout(ViewGroup.java:4981)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
            at android.view.View.layout(View.java:15684)
            at android.view.ViewGroup.layout(ViewGroup.java:4981)
            at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:494)
            at android.view.View.layout(View.java:15684)
            at android.view.ViewGroup.layout(ViewGroup.java:4981)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
            at android.view.View.layout(View.java:15684)
            at android.view.ViewGroup.layout(ViewGroup.java:4981)
            at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2186)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1920)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1106)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6018)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:792)
            at android.view.Choreographer.doCallbacks(Choreographer.java:596)
            at android.view.Choreographer.doFrame(Choreographer.java:557)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:778)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:155)
            at android.app.ActivityThread.main(ActivityThread.java:5696)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
     Caused by:
适配器:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.VideoInfoHolder> implements YouTubePlayer.OnInitializedListener{

    //these ids are the unique id for each video
    String[] VideoID = {"P3mAtvs5Elc", "nCgQDjiotG0", "P3mAtvs5Elc"};
    Context ctx;
    YouTubeThumbnailLoader youTubeThumbnailLoader;
    private MyPlayerStateChangeListener playerStateChangeListener;
    private MyPlaybackEventListener playbackEventListener;
    private YouTubePlayer player;

    public RecyclerAdapter(Context context) {
        this.ctx = context;
    }

    @Override
    public VideoInfoHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
        return new VideoInfoHolder(itemView);
    }

    @Override
    public void onBindViewHolder(final VideoInfoHolder holder, final int position) {

        holder. youTubeView.initialize("AIzaSyCS8nKb2V9RROPP3ehy4mhQbwhVdfe7V8o", this);
        playerStateChangeListener = new MyPlayerStateChangeListener();
        playbackEventListener = new MyPlaybackEventListener();

        holder.relativeLayoutOverYouTubeThumbnailView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                holder.relativeLayoutOverYouTubeThumbnailView.setVisibility(View.GONE);
                player.play();

            }
        });

        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.relativeLayoutOverYouTubeThumbnailView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                holder.relativeLayoutOverYouTubeThumbnailView.setVisibility(View.GONE);

            }
        });

        /*holder.youTubeThumbnailView.initialize("AIzaSyCS8nKb2V9RROPP3ehy4mhQbwhVdfe7V8o", new YouTubeThumbnailView.OnInitializedListener() {
            @Override
            public void onInitializationSuccess(YouTubeThumbnailView youTubeThumbnailView, YouTubeThumbnailLoader youTubeThumbnailLoader) {
                youTubeThumbnailLoader = youTubeThumbnailLoader;
                youTubeThumbnailLoader.setVideo(VideoID[position]);
                youTubeThumbnailLoader.setOnThumbnailLoadedListener(onThumbnailLoadedListener);
            }

            @Override
            public void onInitializationFailure(YouTubeThumbnailView youTubeThumbnailView, YouTubeInitializationResult youTubeInitializationResult) {
                //write something for failure
            }
        });*/
    }

    @Override
    public int getItemCount() {
        return VideoID.length;
    }

    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean b) {
        this.player = player;
        player.setPlayerStateChangeListener(playerStateChangeListener);
        player.setPlaybackEventListener(playbackEventListener);

        if (!b) {
            player.cueVideo("fhWaJi1Hsfo"); // Plays https://www.youtube.com/watch?v=fhWaJi1Hsfo
        }
    }

    @Override
    public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {

    }

    public class VideoInfoHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        protected RelativeLayout relativeLayoutOverYouTubeThumbnailView;
        YouTubeThumbnailView youTubeThumbnailView;
        protected ImageView playButton;
        private YouTubePlayerView youTubeView;

        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);
//            youTubeView = (YouTubePlayerView)itemView. findViewById(R.id.youtube_view);

        }

        @Override
        public void onClick(View v) {

            Intent intent = YouTubeStandalonePlayer.createVideoIntent((Activity) ctx, "AIzaSyCS8nKb2V9RROPP3ehy4mhQbwhVdfe7V8o", VideoID[getLayoutPosition()]);
            ctx.startActivity(intent);

        }
    }


    private final class MyPlaybackEventListener implements YouTubePlayer.PlaybackEventListener {

        @Override
        public void onPlaying() {
            // Called when playback starts, either due to user action or call to play().

        }

        @Override
        public void onPaused() {
            // Called when playback is paused, either due to user action or call to pause().
        }

        @Override
        public void onStopped() {
            // Called when playback stops for a reason other than being paused.
        }

        @Override
        public void onBuffering(boolean b) {
            // Called when buffering starts or ends.
        }

        @Override
        public void onSeekTo(int i) {
            // Called when a jump in playback position occurs, either
            // due to user scrubbing or call to seekRelativeMillis() or seekToMillis()
        }
    }

    private final class MyPlayerStateChangeListener implements YouTubePlayer.PlayerStateChangeListener {

        @Override
        public void onLoading() {
            // Called when the player is loading a video
            // At this point, it's not ready to accept commands affecting playback such as play() or pause()
        }

        @Override
        public void onLoaded(String s) {
            // Called when a video is done loading.
            // Playback methods such as play(), pause() or seekToMillis(int) may be called after this callback.
        }

        @Override
        public void onAdStarted() {
            // Called when playback of an advertisement starts.
        }

        @Override
        public void onVideoStarted() {
            // Called when playback of the video starts.
        }

        @Override
        public void onVideoEnded() {
            // Called when the video reaches its end.
        }

        @Override
        public void onError(YouTubePlayer.ErrorReason errorReason) {
            // Called when an error occurs.
        }
    }
}
公共类RecyclerAdapter扩展了RecyclerView。适配器实现YouTubePlayer.OnInitializedListener{
//这些id是每个视频的唯一id
字符串[]VideoID={“P3mAtvs5Elc”、“nCgQDjiotG0”、“P3mAtvs5Elc”};
上下文ctx;
YouTubeThumbnailLoader YouTubeThumbnailLoader;
私有MyPlayerStateChangeListener播放器StateChangeListener;
私有MyPlaybackEventListener playbackEventListener;
私人青年球员;
公共回收适配器(上下文){
this.ctx=上下文;
}
@凌驾
公共VideoInfoHolder onCreateViewHolder(视图组父级,int-viewType){
View itemView=LayoutInflater.from(parent.getContext()).flate(R.layout.list_item,parent,false);
返回新的VideoInfoHolder(itemView);
}
@凌驾
公共无效onBindViewHolder(最终VideoInfoHolder,最终int位置){
holder.youTubeView.initialize(“AIzaSyCS8nKb2V9RROPP3ehy4mhQbwhVdfe7V8o”,本文件);
playerStateChangeListener=新建MyPlayerStateChangeListener();
playbackEventListener=新的MyPlaybackEventListener();
holder.relativeLayoutOverYouTubeThumbnailView.setOnClickListener(新视图.OnClickListener()){
@凌驾
公共void onClick(视图v){
holder.relativeLayoutOverYouTubeThumbnailView.setVisibility(View.GONE);
player.play();
}
});
最终YouTubeThumbnailLoader.OnThumbnailLoadedListener OnThumbnailLoadedListener=新建YouTubeThumbnailLoader.OnThumbnailLoadedListener(){
@凌驾
OnTubThumbNailError(YouTubThumbNailView YouTubThumbNailView,YouTubThumbNailLoader.ErrorReason){
}
@凌驾
HumbnailLoaded上的公共无效(YouTubeThumbnailView YouTubeThumbnailView,字符串s){
youTubeThumbnailView.setVisibility(View.VISIBLE);
holder.relativeLayoutOverYouTubeThumbnailView.setVisibility(View.VISIBLE);
}
};
holder.relativeLayoutOverYouTubeThumbnailView.setOnClickListener(新视图.OnClickListener()){
@凌驾
公共void onClick(视图v){
holder.relativeLayoutOverYouTubeThumbnailView.setVisibility(View.GONE);
}
});
/*holder.youTubeThumbnailView.initialize(“AIzaSyCS8nKb2V9RROPP3ehy4mhQbwhVdfe7V8o”),新的youTubeThumbnailView.OnInitializedListener(){
@凌驾
初始化成功时的公共void(YouTubThumbNailView YouTubThumbNailView,YouTubThumbNailLoader YouTubThumbNailLoader){
youTubeThumbnailLoader=youTubeThumbnailLoader;
setVideo(VideoID[position]);
youTubeThumbnailLoader.setOnThumbnailLoadedListener(onThumbnailLoadedListener);
}
@凌驾
初始化失败时的公共void(YouTubeThumbnailView YouTubeThumbnailView,YouTubeInitializationResult YouTubeInitializationResult){
//为失败写点东西
}
});*/
}
@凌驾
public int getItemCount(){
返回VideoID.length;
}
@凌驾
public void onInitializationSuccess(YouTubePlayer.Provider提供程序、YouTubePlayer播放器、布尔b){
this.player=player;
player.setPlayerStateChangeListener(playerStateChangeListener);
player.setPlaybackEventListener(playbackEventListener);
如果(!b){
player.cueVideo(“fhWaJi1Hsfo”);//播放https://www.youtube.com/watch?v=fhWaJi1Hsfo
}
}
@凌驾
public void onInitializationFailure(YouTubePlayer.Provider提供程序,YouTubeInitializationResult YouTubeInitializationResult){
}
公共类VideoInfoHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
受保护的RelativeLayout RelativeLayoutOveryoutSubethumbnailView;
YouTubeThumbnailView YouTubeThumbnailView;
受保护的图像视图播放按钮;
私人YouTubePlayerView youTubeView;
公共视频信息持有者(查看项目视图){
超级(项目视图);
playButton=(ImageView)itemView.findViewById(R.id.btnYoutube_播放器);
playButton.setOnClickListener(此);
RelativeLayoutOveryoutTubeThumbNailView=(RelativeLayout)itemView.findViewById(R.id.RelativeLayout\u覆盖youtube\u缩略图);
youTubeThumbnailView=(youTubeThumbnailView)itemView.findviewbyd(R.id.youtube\u缩略图);
//youTubeView=(YouTubePlayerView)itemView.findviewbyd(R.id.youtube\u视图);
}
@凌驾
公共void onClick(视图v){
Intent Intent=YouTubeStandalonePlayer.createVideoIntent((活动)ctx,“AIzaSyCS8nKb2V9RROPP3ehy4mhQbwhVdfe7V8o”,VideoID[getLayoutPosition());
星触觉(意图);
}
}
私有最终类MyPlaybackEventListener实现YouTubeplyer.PlaybackEventListener{
@凌驾
公众娱乐{
//由于用户操作或调用play()而在播放开始时调用。
}
@凌驾
已暂停的公共void(){
//由于用户操作或调用pause()暂停播放时调用。
}
@凌驾
公共空间{
//当播放因暂停以外的原因停止时调用。
}
@凌驾
公共void onBuffering(布尔b){
//在缓冲开始或结束时调用。
}
@凌驾
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parent_relativeLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true"

        card_view:cardCornerRadius="5dp"
        card_view:cardElevation="0dp"
        android:layout_marginTop="10dp"
        card_view:cardBackgroundColor="@android:color/black"

        card_view:cardPreventCornerOverlap="false"
        card_view:cardUseCompatPadding="true">


        <com.google.android.youtube.player.YouTubeThumbnailView
        android:id="@+id/youtube_thumbnail"
        android:layout_width="match_parent"
        android:layout_height="180dp"
        android:scaleType="centerCrop"
        android:visibility="gone"/>

        <com.google.android.youtube.player.YouTubePlayerView
            android:id="@+id/youtube_view"
            android:layout_width="match_parent"
            android:layout_height="180dp"/>
        <RelativeLayout android:id="@+id/relativeLayout_over_youtube_thumbnail"
            android:layout_width="match_parent"
            android:layout_height="250dp"
            android:background="#707070"
            android:visibility="visible">

            <ImageView android:id="@+id/btnYoutube_player"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="center"

                android:src="@mipmap/ic_launcher"/>

        </RelativeLayout>
    </android.support.v7.widget.CardView>

</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parent_relativeLayout"
    android:layout_width="match_parent"
    android:layout_height="270dp">

    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:clickable="true"
        card_view:cardBackgroundColor="@android:color/black"
        card_view:cardCornerRadius="5dp"
        card_view:cardElevation="0dp"
        card_view:cardPreventCornerOverlap="false"
        card_view:cardUseCompatPadding="true">


        <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" />

        <RelativeLayout
            android:id="@+id/relativeLayout_over_youtube_thumbnail"
            android:layout_width="match_parent"
            android:layout_height="250dp"
            android:visibility="visible">

            <ImageView
                android:id="@+id/btnYoutube_player"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="center"
                android:src="@android:drawable/btn_plus" />
            <TextView
                android:id="@+id/videosTitle_tv"
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:text="Vidoes title here"
                android:gravity="center"
                android:layout_alignParentBottom="true"/>
        </RelativeLayout>
    </android.support.v7.widget.CardView>


</RelativeLayout>
package com.mobileappdev.videosapp.adapter;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubeStandalonePlayer;
import com.google.android.youtube.player.YouTubeThumbnailLoader;
import com.google.android.youtube.player.YouTubeThumbnailView;
import com.mobileappdev.videosapp.R;

/**
 * Created by ofaroque on 8/13/15.
 */
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.VideoInfoHolder> {

    //these ids are the unique id for each video
    String[] VideoID = {"P3mAtvs5Elc", "nCgQDjiotG0", "P3mAtvs5Elc"};
    String[] Ttitles = {"Video # 1", "Video # 2", "Video # 3"};
    Context ctx;
    private static String KEY = "Add your authentication key for google";

    public RecyclerAdapter(Context context) {
        this.ctx = context;
    }

    @Override
    public VideoInfoHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
        return new VideoInfoHolder(itemView);
    }

    @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(KEY, new YouTubeThumbnailView.OnInitializedListener() {
            @Override
            public void onInitializationSuccess(YouTubeThumbnailView youTubeThumbnailView, YouTubeThumbnailLoader youTubeThumbnailLoader) {

                youTubeThumbnailLoader.setVideo(VideoID[position]);

                youTubeThumbnailLoader.setOnThumbnailLoadedListener(onThumbnailLoadedListener);
                holder.videosTitleTextView.setText(Ttitles[position]);
            }

            @Override
            public void onInitializationFailure(YouTubeThumbnailView youTubeThumbnailView, YouTubeInitializationResult youTubeInitializationResult) {
                //write something for failure
            }
        });
    }

    @Override
    public int getItemCount() {
        return VideoID.length;
    }

    public class VideoInfoHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        protected RelativeLayout relativeLayoutOverYouTubeThumbnailView;
        YouTubeThumbnailView youTubeThumbnailView;
        protected ImageView playButton;
        protected TextView videosTitleTextView;

        public VideoInfoHolder(View itemView) {
            super(itemView);
            playButton = (ImageView) itemView.findViewById(R.id.btnYoutube_player);
            videosTitleTextView = (TextView) itemView.findViewById(R.id.videosTitle_tv);
            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, KEY, VideoID[getLayoutPosition()]);
            ctx.startActivity(intent);
        }
    }
}
 package com.mobileappdev.videosapp;

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.util.Log;

    import com.google.firebase.database.DataSnapshot;
    import com.google.firebase.database.DatabaseError;
    import com.google.firebase.database.DatabaseReference;
    import com.google.firebase.database.FirebaseDatabase;
    import com.google.firebase.database.ValueEventListener;
    import com.mobileappdev.videosapp.adapter.RecyclerAdapter;
    import com.mobileappdev.videosapp.models.Videos;

    public class MainActivity extends AppCompatActivity {

        private static String TAG = MainActivity.class.getSimpleName();


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);


            RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
            recyclerView.setHasFixedSize(true);
            //to use RecycleView, you need a layout manager. default is LinearLayoutManager
            LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
            linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
            recyclerView.setLayoutManager(linearLayoutManager);
            RecyclerAdapter adapter = new RecyclerAdapter(this);
            recyclerView.setAdapter(adapter);

        }
    }