Tôi có RecyclerView với CardView bên trong nó. Tôi muốn mỗi CardView có YouTubePlayerFragment riêng của mình. Ngay cả khi họ không thể hoạt động cùng một lúc, tôi thậm chí không thể tạo ra YouTubePlayerFragment trong bất kỳ CardView nào nhưng nó là phiên bản đầu tiên trong RecyclerView. Khi nhấp vào nút trên thẻ có nghĩa vụ thiết lập YouTubePlayerFragment, thẻ luôn đặt nó trên thẻ đầu tiên, ngay cả khi tôi đã nhấp vào thẻ thứ hai. Là những gì tôi đang cố gắng để làm có thể?YouTubePlayerFragment bên trong ReyclerView
Sau đây là các bộ phận liên quan của mã:
Chủ cho đoạn trong CardView XML: (sử dụng mảnh trực tiếp trong xml được đưa ra nhị phân ngoại lệ XML, có thể là do đoạn trong một đoạn ở đâu đó dọc theo dòng)
ViewHolder:
public class VideoViewHolder extends RecyclerView.ViewHolder {
protected FrameLayout containerYouTubePlayer;
protected TextView textViewTitle;
protected ImageView imageViewThumbNail;
protected Button buttonPreview, buttonSet;
protected Context activityContext;
public VideoViewHolder(Context activityContext, View itemView) {
super(itemView);
this.activityContext = activityContext;
containerYouTubePlayer = (FrameLayout) itemView.findViewById(R.id.youtube_holder);
textViewTitle = (TextView) itemView.findViewById(R.id.textView_title);
imageViewThumbNail = (ImageView) itemView.findViewById(R.id.imageView_video_thumbnail);
buttonPreview = (Button) itemView.findViewById(R.id.button_preview);
buttonSet = (Button) itemView.findViewById(R.id.button_set);
}
}
RecyclerView Adaptor:
public class VideoCardAdapter extends RecyclerView.Adapter<VideoViewHolder> {
private static final String TAG = "VidWall.VideoCardAdapter";
private List<VideoInfo> videoList;
private Context activityContext;
public VideoCardAdapter(Context activityContext, List<VideoInfo> videoList) {
this.activityContext = activityContext;
this.videoList = videoList;
}
@Override
public int getItemCount() {
return videoList.size();
}
@Override
public void onBindViewHolder(final VideoViewHolder videoViewHolder, int i) {
final VideoInfo videoInfo = videoList.get(i);
videoViewHolder.textViewTitle.setText(videoInfo.displayName);
videoViewHolder.imageViewThumbNail.setImageDrawable(ContextCompat.getDrawable(activityContext, activityContext.getResources().getIdentifier(videoInfo.fileNameThumbnail, "drawable", activityContext.getPackageName())));
videoViewHolder.buttonPreview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Utils.logDebug(TAG, "buttonPreview clicked");
// Add the YouTube fragment to view
final YouTubePlayerFragment youTubePlayerFragment = YouTubePlayerFragment.newInstance();
((Activity) activityContext).getFragmentManager().beginTransaction().replace(videoViewHolder.containerYouTubePlayer.getId(), youTubePlayerFragment).commit();
youTubePlayerFragment.initialize(WallpapersActivity.Y_KEY, new YouTubePlayer.OnInitializedListener() {
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, final YouTubePlayer youTubePlayer, boolean b) {
Utils.logDebug(TAG, "onInitializationSuccess");
youTubePlayer.cueVideo("xxxxxxxx");
youTubePlayer.setShowFullscreenButton(false);
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
Utils.logError(TAG, "Could not initialize YouTubePlayer");
}
});
videoViewHolder.containerYouTubePlayer.setVisibility(View.VISIBLE);
}
});
}
@Override
public VideoViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_wallpaper_card, viewGroup, false);
return new VideoViewHolder(activityContext, itemView);
}
}
Giao diện người dùng của YoutubePlayerFragment ở đâu? –
@ MinaF.Beshay Nó được tích hợp trong YouTubeFlayment như được cung cấp bởi thư viện. – Flyview
OK nhưng tôi nhận được ngoại lệ java.lang.IllegalArgumentException: Không có chế độ xem nào cho id 0x2 (không xác định) cho đoạn YouTubePlayerFragment –