У меня есть ViewPager внутри RecyclerView Adapter для отображения нескольких изображений. Код адаптера RecyclerView:
@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) {
Call<List<ImagesModel>> call = restApiClass.getPostImages(list.get(position).getId());
call.enqueue(new Callback<List<ImagesModel>>() {
@Override
public void onResponse(Call<List<ImagesModel>> call, Response<List<ImagesModel>> response) {
if (response.isSuccessful() && response.body() != null) {
imagesList = response.body();
viewPagerAdapter = new ViewPagerAdapter (imagesList, context);
Log.i("adapterPosts", "A NEW ADAPTER IS CREATED");
holder.postsViewPager.setAdapter(viewPagerAdapter );
holder.postsCircleIndicator.setViewPager(holder.postsViewPager);
}
}
}
Адаптер ViewPager:
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
//...defination codes...//
progressBar .setVisibility(View.VISIBLE);
Glide.with(context).load(ApiClient.Base_URL + list.get(position).getImage())
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.dontAnimate()
.dontTransform()
.fitCenter()
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
progressBar .setVisibility(View.GONE);
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
progressBar .setVisibility(View.GONE);
return false;
}
})
.into(photoView);
container.addView(view);
return view;
}
Проблема: когда я прокручиваю вверх и вверх RecyclerView, адаптер ViewPager создается снова и снова, даже если он создается до (я вижу это в журнале). Я знаю, что onBindViewHolder () вызывается каждый раз, поэтому я попробовал это:
if(viewPagerAdapter ==null){
viewPagerAdapter = new ViewPagerAdapter(imagesList, context);
holder.postsViewPager.setAdapter(viewPagerAdapter);
holder.postsCircleIndicator.setViewPager(holder.postsViewPager);
} else {
viewPagerAdapter.notifyDataSetChanced();
}
Но на этот раз загружается только первый ViewPager. Так что я должен делать, чтобы не создавать адаптер каждый раз?