Mam RecyclerView z CardViews w środku. Chcę, aby każdy CardView miał swój własny YouTubePlayerFragment. Nawet jeśli nie wszystkie mogą być aktywne od razu, nie mogę nawet utworzyć instancji YouTubePlayerFragment w żadnym CardView, ale pierwszy w RecyclerView. Kliknięcie przycisku na karcie, która ma skonfigurować YouTubePlayerFragment, zawsze ustawia ją na pierwszej karcie, nawet jeśli kliknąłem drugą kartę. Czy to, co próbuję zrobić, to możliwe?YouTubePlayerFragment wewnątrz ReyclerView
Oto odpowiednie fragmenty kodu:
Uchwyt do fragmentu w CardView XML: (stosując fragment bezpośrednio w XML został dając binarny wyjątek XML, prawdopodobnie z powodu fragmentu w obrębie fragmentu gdzieś wzdłuż linii)
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 Adapter:
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);
}
}
Gdzie jest interfejs użytkownika YoutubePlayerFragment? –
@ MinaF.Beshay Jest wbudowany w YouTubePlayFragment zgodnie z biblioteką. – Flyview
OK, ale otrzymuję wyjątek java.lang.IllegalArgumentException: Nie znaleziono widoku dla id 0x2 (nieznany) dla fragmentu YouTubePlayerFragment –