У меня есть custom adapter
, в котором у меня смешанные данные, в списке данных есть URL-адреса видео и изображений, и в зависимости от типа данных я привязываю их к различным держателям просмотра.Я использую SnapHelper
, чтобы сделать его как слайдер.Я показываю youtube video
и изображения в моем горизонтальном списке.Когда я провожу пальцем по левому краю, адаптер дает правильную позицию обзора, а когда я провожу пальцем вправо, он начинает давать мне неправильную случайную позицию, поэтому мой проигрыватель YouTube, прежде чем достигнет своего вида, падает.При перемещении влево положение печатается как 0 1 2 3 4 5, но при движении вправо выдается 6 2 3 1, а затем происходит сбой. В RecyclerView
есть одно видео, а другие - изображения.Приложение вылетает при смахивании назад.По фрагменту YouTubePlayerFragment для данного фрагмента не найдено ни одного представления для идентификатора 0x7f0901b0 (com.array151.mypu: id / youtube_holder).
import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.DownloadManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayerFragment;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
import java.util.List;
public class ContentAdapter extends RecyclerView.Adapter{
private List<PhotosModel> photosList;
Activity context1;
private static final int RECOVERY_REQUEST = 1;
YouTubePlayer youTubePlayer1;
private String youtubeAPI = "AIzaSyCceeIhnkIDRvCqzPoxsw8yUPRnvQO9Wto";
public ContentAdapter(List<PhotosModel> photosList, Activity context) {
this.context1 = context;
this.photosList = photosList;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
switch (viewType) {
case PhotosModel.VIDEO_TYPE:
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.video_item, parent, false);
return new VideoViewHolder(view);
case PhotosModel.IMAGE_TYPE:
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.image_item, parent, false);
return new ImageViewHolder(view);
}
return null;
}
@Override
public int getItemViewType(int position) {
Log.e("getType",photosList.get(position).getType()+"");
switch (photosList.get(position).getType()) {
case 0:
return PhotosModel.VIDEO_TYPE;
case 1:
return PhotosModel.IMAGE_TYPE;
default:
return -1;
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int i) {
holder.setIsRecyclable(false);
final PhotosModel model = photosList.get(i);
Log.e("adapter position", i + "model.getType()"+model.getType()+"psoiion"+holder.getAdapterPosition());
if (model != null) {
switch (model.getType()) {
case PhotosModel.VIDEO_TYPE:
Log.e("adapter position", i + "inside"+model.getType()+((VideoViewHolder) holder).containerYouTubePlayer.getId());
final YouTubePlayerFragment youTubePlayerFragment = YouTubePlayerFragment.newInstance();
((Activity) context1).getFragmentManager().beginTransaction().replace(((VideoViewHolder) holder).containerYouTubePlayer.getId(), youTubePlayerFragment).commit();
youTubePlayerFragment.initialize(youtubeAPI, new YouTubePlayer.OnInitializedListener() {
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, final YouTubePlayer youTubePlayer, boolean b) {
Log.e("player", "onInitializationSuccess");
youTubePlayer1 = youTubePlayer;
youTubePlayer.loadVideo("fhWaJi1Hsfo");
youTubePlayer.setShowFullscreenButton(true);
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
Log.e("player", "failure" + youTubeInitializationResult);
}
});
break;
case PhotosModel.IMAGE_TYPE:
Picasso.with(context1)
.load(model.getImageUrl())
.placeholder(R.drawable.banner)
.noFade()
.into(((ImageViewHolder) holder).imageView, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
}
}
);
((ImageViewHolder) holder).relativeLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Download download = new Download(context1);
download.savePic(model.getImageUrl());
}
});
break;
}
}
}
@Override
public int getItemCount() {
return photosList.size();
}
public class ImageViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
RelativeLayout relativeLayout,rl_slider;
protected FrameLayout containerYouTubePlayer;
ImageViewHolder(View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.iv_slider);
relativeLayout = itemView.findViewById(R.id.rl_download);
rl_slider= itemView.findViewById(R.id.rl_slider);
}
}
public class VideoViewHolder extends RecyclerView.ViewHolder {
protected FrameLayout containerYouTubePlayer;
VideoViewHolder(View itemView) {
super(itemView);
containerYouTubePlayer= itemView.findViewById(R.id.youtube_holder);
}
}
}