recyclerview里面的ViewPager抛出异常

时间:2019-09-12 15:33:59

标签: android android-viewpager

从recyclerView项调用的ViewPageAdapter内部存在问题。

这是ViewPagerAdapter的代码:

public class ViewPagerAdapterPostsSpot extends PagerAdapter {

    private Context context;
    private LayoutInflater layoutInflater;
    private List<SliderMediaPostsHome> sliderImg;
    private ImageLoader imageLoader;

    SimpleExoPlayerView exoPlayerView;
    SimpleExoPlayer exoPlayer;

    YouTubePlayerView youTubePlayerView;

    public static String MISDATOS= "MisDatos";

    SharedPreferences prefs;
    SharedPreferences.Editor editor;


    private String url;

    public ViewPagerAdapterPostsSpot(List sliderImg, Context context) {
        this.sliderImg = sliderImg;
        this.context = context;
    }

    @Override
    public int getCount() {



        return sliderImg.size();
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    @SuppressLint("ResourceAsColor")
    @Override
    public Object instantiateItem(final ViewGroup container, final int position) {

        layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate(R.layout.custom_layout, null);

        SliderMediaPostsHome utils = sliderImg.get(position);

        ImageView imageView = (ImageView) view.findViewById(R.id.imageView);


        youTubePlayerView = view.findViewById(R.id.youtube_player_view);

        imageLoader = CustomVolleyRequest.getInstance(context).getImageLoader();
        imageLoader.get(utils.getSliderImageUrl(), ImageLoader.getImageListener(imageView, R.mipmap.ic_launcher, android.R.drawable.ic_dialog_alert));
        url = "https://../postsmedia/";

        prefs = context.getSharedPreferences(MISDATOS, Context.MODE_PRIVATE);

        editor = prefs.edit();

        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "Slide "+position, Toast.LENGTH_SHORT).show();
                Log.d("home_post","post media= "+sliderImg.get(position).getSliderImageUrl());

                HomeActivity activity = ((HomeActivity) (context));
                FragmentManager fm = activity.getSupportFragmentManager();
                editor.putString("post_media",sliderImg.get(position).getSliderImageUrl());
                editor.apply();
                PostImageFragment alertDialog = new PostImageFragment();


                alertDialog.show(fm,"fragment_alert");
            }
        });



        Uri video=Uri.parse(utils.sliderImageUrl);

        exoPlayerView = (SimpleExoPlayerView) view.findViewById(R.id.exo_player_view);

        String tipo = utils.getSliderTipo();


        if (tipo.equals("2")){
            imageView.setVisibility(View.GONE);
            youTubePlayerView.setVisibility(View.GONE);
            exoPlayerView.setVisibility(View.VISIBLE);
        }
        if (tipo.equals("1")){
            imageView.setVisibility(View.VISIBLE);
            exoPlayerView.setVisibility(View.GONE);
            youTubePlayerView.setVisibility(View.GONE);
        }
        if (tipo.equals("3")){
            imageView.setVisibility(View.GONE);
            exoPlayerView.setVisibility(View.GONE);
            youTubePlayerView.setVisibility(View.VISIBLE);

        }

        Log.d("resp", "resp<<<<<<<. tipo en adapter" + utils.getSliderTipo());



        ((HomeActivity) (context)).getLifecycle().addObserver(youTubePlayerView);
        youTubePlayerView.addYouTubePlayerListener(new AbstractYouTubePlayerListener() {
            @Override
            public void onReady(@NonNull YouTubePlayer youTubePlayer) {

                String videoyoutube = sliderImg.get(position).getSliderImageUrl();
                String video_id = videoyoutube.substring(videoyoutube.indexOf("=")+1);
                String videoId = video_id;
                youTubePlayer.loadVideo(videoId, 0);

            }
        });



        try {


            BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
            TrackSelector trackSelector = new DefaultTrackSelector(new AdaptiveTrackSelection.Factory(bandwidthMeter));
            exoPlayer = ExoPlayerFactory.newSimpleInstance(context, trackSelector);

            Uri videoURI = video;

            DefaultHttpDataSourceFactory dataSourceFactory = new DefaultHttpDataSourceFactory("exoplayer_video");
            ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
            MediaSource mediaSource = new ExtractorMediaSource(videoURI, dataSourceFactory, extractorsFactory, null, null);

            exoPlayerView.setPlayer(exoPlayer);
            exoPlayer.prepare(mediaSource);
            exoPlayer.setPlayWhenReady(false);
            exoPlayerView.setBackgroundResource(grey_900);
        }catch (Exception e){
            Log.e("MainAcvtivity"," exoplayer error "+ e.toString());
        }




        ViewPager vp = (ViewPager) container;
        vp.addView(view, 0);
        return view;

    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {

        ViewPager vp = (ViewPager) container;
        View view = (View) object;
        vp.removeView(view);

    }
}

这是我如何从recyclerview调用ViewpagerAdapter:

viewPagerAdapter = new ViewPagerAdapterPostsSpot(sliderImg, (HomeActivity) context);

            holder.viewPager.setAdapter(viewPagerAdapter);
            viewPagerAdapter.notifyDataSetChanged();
            dotscount = viewPagerAdapter.getCount();
            Log.d("POST","dotscount recyclerview postSpot="+dotscount);
            dots = new ImageView[dotscount];

            if (dotscount==0){
                holder.viewPager.setVisibility(View.GONE);

            }

这是抛出异常:

java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 4, found: 6 Pager id: com.mpidesarrollo.movmap:id/viewPager Pager class: class androidx.viewpager.widget.ViewPager Problematic adapter: class com.mpidesarrollo.movmap.ViewPagerAdapterPostsSpot

0 个答案:

没有答案