从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