Youtube video not showing up in RecyclerView

I ran into a problem when the video on YouTube is not displayed, only the last one is playing, and this too, when I scroll the video, disappears. I want every video to be displayed and every video is different.

public class MyRecyclerViewAdapter extends Adapter<MyRecyclerViewAdapter .DataObjectHolder> { private static String LOG_TAG = "MyRecyclerViewAdapter"; private ArrayList<DataObject> mDataset; private static MyClickListener myClickListener; private static final int RECOVERY_DIALOG_REQUEST = 10; public static String key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; Context ctx; View view; public static class DataObjectHolder extends ViewHolder implements View .OnClickListener { YouTubePlayerView youTubeView; public DataObjectHolder(View itemView) { super(itemView); youTubeView = (YouTubePlayerView) itemView.findViewById(R.id.youtube_view); Log.i(LOG_TAG, "Adding Listener"); itemView.setOnClickListener(this); } @Override public void onClick(View v) { myClickListener.onItemClick(getAdapterPosition(), v); } } public void setOnItemClickListener(MyClickListener myClickListener) { this.myClickListener = myClickListener; } public MyRecyclerViewAdapter(Context context,ArrayList<DataObject> myDataset) { mDataset = myDataset; ctx=context; } @Override public DataObjectHolder onCreateViewHolder(ViewGroup parent, int viewType) { view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.playerview_demo, parent, false); DataObjectHolder dataObjectHolder = new DataObjectHolder(view); return dataObjectHolder; } @Override public void onBindViewHolder(DataObjectHolder holder, final int position) { holder.youTubeView.initialize(key, new YouTubePlayer.OnInitializedListener() { @Override public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean b) { player.cueVideo(mDataset.get(position).getmText1()); } @Override public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult errorReason) { if (errorReason.isUserRecoverableError()) { errorReason.getErrorDialog((Activity) ctx, RECOVERY_DIALOG_REQUEST).show(); } else { String errorMessage = String.format("YouTube Error (%1$s)", errorReason.toString()); Toast.makeText(ctx, errorMessage, Toast.LENGTH_LONG).show(); } } protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == RECOVERY_DIALOG_REQUEST) { // Retry initialization if user performed a recovery action getYouTubePlayerProvider().initialize(key, this); } } protected YouTubePlayer.Provider getYouTubePlayerProvider() { Toast.makeText(ctx, view.toString(), Toast.LENGTH_LONG).show(); return (YouTubePlayerView) view.findViewById(R.id.youtube_view); } }); } public void addItem(DataObject dataObj, int index) { mDataset.add(index, dataObj); notifyItemInserted(index); } public void deleteItem(int index) { mDataset.remove(index); notifyItemRemoved(index); } @Override public int getItemCount() { return mDataset.size(); } public interface MyClickListener { public void onItemClick(int position, View v); } } 
+6
source share
2 answers

If I understand correctly, the elements in your RecyclerView are not displayed correctly / completely? Some screenshots and your xml file will be useful.

If this is really a problem, check playerview_demo.xml if layout_height set to wrap_content

If it was not installed on wrap_content , that was the problem. If not, let us know.

0
source

You cannot do this because the YoutubePlayer too large to be added to recyclerview. Use YouTubeThumbnailView instead to display thumbnails. When the user clicks on one of them, you can run the YouTubePlayerFragment or action with the YouTubeplayerView .

In your case, it will look like

 public class MyRecyclerViewAdapter extends Adapter<MyRecyclerViewAdapter .DataObjectHolder> { private static String LOG_TAG = "MyRecyclerViewAdapter"; private ArrayList<DataObject> mDataset; private static MyClickListener myClickListener; private static final int RECOVERY_DIALOG_REQUEST = 10; public static String key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; Context ctx; View view; public static class DataObjectHolder extends ViewHolder implements View .OnClickListener { YouTubeThumbnailView youTubeThumbnailView ; public DataObjectHolder(View itemView) { super(itemView); youTubeThumbnailView = (YouTubeThumbnailView ) itemView.findViewById(R.id.yourId); itemView.setOnClickListener(this); } @Override public void onClick(View v) { myClickListener.onItemClick(getAdapterPosition(), v); } } public void setOnItemClickListener(MyClickListener myClickListener) { this.myClickListener = myClickListener; } public MyRecyclerViewAdapter(Context context,ArrayList<DataObject> myDataset) { mDataset = myDataset; ctx=context; } @Override public DataObjectHolder onCreateViewHolder(ViewGroup parent, int viewType) { view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.playerview_demo, parent, false); DataObjectHolder dataObjectHolder = new DataObjectHolder(view); return dataObjectHolder; } @Override public void onBindViewHolder(DataObjectHolder holder, final int position) { holder.youTubeThumbnailView.initialize(key, new YouTubePlayer.OnInitializedListener() { @Override public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean b) { } @Override public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult errorReason) { if (errorReason.isUserRecoverableError()) { errorReason.getErrorDialog((Activity) ctx, RECOVERY_DIALOG_REQUEST).show(); } else { String errorMessage = String.format("YouTube Error (%1$s)", errorReason.toString()); Toast.makeText(ctx, errorMessage, Toast.LENGTH_LONG).show(); } } protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == RECOVERY_DIALOG_REQUEST) { // Retry initialization if user performed a recovery action getYouTubePlayerProvider().initialize(key, this); } } protected YouTubePlayer.Provider getYouTubePlayerProvider() { Toast.makeText(ctx, view.toString(), Toast.LENGTH_LONG).show(); return (YouTubePlayerView) view.findViewById(R.id.youtube_view); } }); } public void addItem(DataObject dataObj, int index) { mDataset.add(index, dataObj); notifyItemInserted(index); } public void deleteItem(int index) { mDataset.remove(index); notifyItemRemoved(index); } @Override public int getItemCount() { return mDataset.size(); } public interface MyClickListener { public void onItemClick(int position, View v); } } 

Edit Thank you Irfan Raza for this. See this answer, it seems that it can do

0
source

All Articles