Адаптер не дает правильное положение - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть 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);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...