0

I am using a RecyclerView.Adapter as the adapter of a ViewPager2, but its appears don´t work properly, sometimes, when the user swipe, the viewpager skip items, for example it´s in 1 and the user swipe to see the item 2, but the ViewPager go to item 3.

Also if I don´t change the visibility of the pageCount, or change the height of the page count to match-parent the problem is fixed, but this is not a option. The ViewPager is in a FrameLayout, a video of the problem:https://drive.google.com/file/d/1sx6ee0d46_Q7WmPglI4FF8VdYmD-E77r/view?usp=sharing

Adapter code:

public class ImagenesSlides extends RecyclerView.Adapter<ImagenesSlides.ViewHolderImagenes> {
private final TabLayout tabLayout;
private final TextView pageCount;
private Activity activity;
private ArrayList<Imagen> imagenes;
private boolean bajarResIma;
private int height;
private Timer timer;

public ImagenesSlides(Activity activity, ArrayList<Imagen> imagenes, boolean bajarResIma, int height, TextView pageCount, TabLayout tabLayout) {
    this.activity = activity;
    this.imagenes = imagenes;
    this.bajarResIma = bajarResIma;
    this.height=height;
    this.pageCount=pageCount;
    this.tabLayout=tabLayout;
}

@NonNull
@Override
public ViewHolderImagenes onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.item_imagen,parent,false);
    return new ViewHolderImagenes(view);
}
@Override
public int getItemCount () {
    return imagenes.size();
}

@Override
public void onBindViewHolder(@NonNull final ViewHolderImagenes holder, int position) {
    try {
        holder.setup(position);
        imagenes.get(position).obtenereRequestCreator(activity.getApplicationContext())
                .placeholder(R.drawable.ic_loading_image)
                .error(R.drawable.ic_error_loading_image)
                .resize((int) (tabLayout.getWidth()*0.95),height)
                .into(holder.getImagen(), new Callback() {
                    @Override
                    public void onSuccess() {
                        if(bajarResIma){
                            new Thread(){
                                @Override
                                public void run() {
                                    super.run();
                                    //bajarResIma(holder.getImagen());
                                }
                            }.start();
                        }
                    }

                    @Override
                    public void onError(Exception e) {
                        e.printStackTrace();
                    }
                });
    }catch (Exception e){
        e.printStackTrace();
    }
}
public void add(int position,Imagen imagen) {
    imagenes.add(position,imagen);
    notifyItemInserted(position);
}
public void add(Imagen imagen) {
    if(imagenes.size()==0){
        add(imagenes.size(),imagen);
    }else{
        add(imagenes.size(),imagen);
    }
}
public void remove(int currentItem) {
    imagenes.remove(currentItem);
    notifyItemRemoved(currentItem);
}
public class ViewHolderImagenes extends RecyclerView.ViewHolder {
    private TouchImageView imagen;

    public ViewHolderImagenes(@NonNull View itemView) {
        super(itemView);
        imagen = (TouchImageView) itemView;
    }
    public void setup(final int pos){
        imagen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(activity, OpcionesImagen.class);
                intent.putExtra(Constantes.KEY_IMAGEN,imagenes.get(pos));
                //DatosCache.setBitMap(ImageUtils.obtenerBitmap(imagen));
                activity.startActivity(intent);
            }
        });
    }
    public TouchImageView getImagen() {
        return imagen;
    }

    public void setImagen(TouchImageView imagen) {
        this.imagen = imagen;
    }

}

public void attachTabLayoutToSlides(final ViewPager2 slideShow) {
    if(timer==null){
        timer=new Timer();
    }
    slideShow.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
        @Override
        public void onPageSelected(int position) {
            super.onPageSelected(position);
            pageCount.setVisibility(View.VISIBLE);
            pageCount.setText(MessageFormat.format("{0}/{1}", slideShow.getCurrentItem() + 1, getItemCount()));
            timer.clock(3000,new RunInFuture<Boolean, Boolean>(){
                @Override
                public void run() {
                    super.run();
                }
                @Override
                public void onOk() {
                    super.onOk();
                    activity.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            pageCount.setVisibility(View.INVISIBLE);
                        }
                    });
                }
            });
        }
    });
    new TabLayoutMediator(tabLayout, slideShow,
            new TabLayoutMediator.TabConfigurationStrategy() {
                @Override
                public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
                    System.out.println(tab);
                }
            }
    ).attach();
}
}

0 Answers0