0

I am working on an Android app.

There is a recyclerView, on each recyclerView item there is a ViewPager that shows a picture or video on every page. All media items are loaded from a remote server at real time.

The first time the activity is loaded, the viewpager loads all pages successfully. Then when scrolling down or up the recyclerview, there are times that the viewpager isn´t show inside the recyclerview item.

For example, at item #1 the viewpager shows 5 pictures(5 pages, on each page a picture, scrolling the viewpager left or right), item #2 shows 3 pictures, item #3 doesn´t show the viewpager because it doesn´t have any pictures. Each item occupies just a device´s screen height, then scrolling back to the first item, I can see that on item #1 there is no viewpager shown.

If I go to another activity and then back to the first activity, the viewpager works again.

What am I missing in my code to make it work after scrolling up and down the recyclerview?

Which part of the code do you need to take a deeper look at the source of the issue?

EDIT

 @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {


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

        editor = prefs.edit();

        id_usuario =  prefs.getString("id_usuario","");
        PostsHomeLogeado getDataAdapter1 =  PostsHomeLogeado.get(position);

        final String id_post = getDataAdapter1.getid_post();
        final String description_post = getDataAdapter1.getdescription_post();
        final String id_spot= getDataAdapter1.getid_spot();
        final String date_post = getDataAdapter1.getdate_post();
        final String userid= getDataAdapter1.getuserid();
        final String tipousuario= getDataAdapter1.gettipousuario();
        final String username= getDataAdapter1.getusername();
        final String sportid= getDataAdapter1.getsportid();
        final String sporticon= getDataAdapter1.getsporticon();
        final String spottypelogo= getDataAdapter1.getspottypelogo();
        final String city_spot= getDataAdapter1.getcity_spot();
        final String country_spot= getDataAdapter1.getcountry_spot();
        final String latitudspot= getDataAdapter1.getlatitudspot();
        final String longitudspot= getDataAdapter1.getlongitudspot();
        final String spotshortname= getDataAdapter1.getspotshortname();
        final String spotverificado= getDataAdapter1.getspotverificado();
        final String profile_image= getDataAdapter1.getProfile_image();
        final String spotverificadopor= getDataAdapter1.getspotverificadopor();
        final String spotverificador= getDataAdapter1.getspotverificador();
        final String sportsdelusuario= getDataAdapter1.getsportsdelusuario();
        final String sportsdelusuariologos= getDataAdapter1.getsportsdelusuariologos();
        final String mediafile= getDataAdapter1.getmediafile();
        final String mediatype= getDataAdapter1.getmediatype();





        if (spotverificado.equals("1")){
            holder.txtVerified.setText(R.string.Verified);
        }
        if (spotverificado.equals("0")){
            holder.txtVerified.setText(R.string.Not_verified);
            holder.verified.setVisibility(View.GONE);
        }



        holder.sp1.setVisibility(View.GONE);
        holder.sp2.setVisibility(View.GONE);
        holder.sp3.setVisibility(View.GONE);
        holder.sp4.setVisibility(View.GONE);
        holder.sp5.setVisibility(View.GONE);
        holder.sp6.setVisibility(View.GONE);
        holder.sp7.setVisibility(View.GONE);
        holder.sp8.setVisibility(View.GONE);



        String mediapostfile []= mediafile.split(",");

        String mediaposttype []= mediatype.split(",");

        Hash_file_maps = new HashMap<String, String>();


        for ( int w=0  ;w < mediapostfile.length;w++){
            if (mediapostfile[w].equals("null")){

                Hash_file_maps.put("vacio", url_postmedia+"noimage.jpg");

            }
            else {
                if (mediaposttype[w].equals("2")){

                    Hash_file_maps.put("video."+mediapostfile[w], url_postmedia+"esvideo.png");

                }
                if (mediaposttype[w].equals("1")) {

                    Hash_file_maps.put("imagen."+mediapostfile[w], url_postmedia+mediapostfile[w]);

                }
                if (mediaposttype[w].equals("3")){

                    Hash_file_maps.put("youtube."+mediapostfile[w], url_postmedia+"youtubevideo.png");

                }
            }

        }




        for(String name : Hash_file_maps.keySet()){



        }






        String deportes []= sportsdelusuariologos.split(",");



        for (int i = 0; i < deportes.length; i++) {
            // Fetch the item, trim it and put it back in
            deportes[i] = deportes[i].trim();

            if (i==0){
                holder.sp1.setVisibility(View.VISIBLE);




                //loading the image
                Glide.with(context)
                        .load(url_sports+deportes[i])
                        .into(holder.sp1);

            }
            if (i==1){
                holder.sp2.setVisibility(View.VISIBLE);
                //loading the image

                Glide.with(context)
                        .load(url_sports+deportes[i])
                        .into(holder.sp2);
            }
            if (i==2){
                holder.sp3.setVisibility(View.VISIBLE);
                //loading the image

                Glide.with(context)
                        .load(url_sports+deportes[i])
                        .into(holder.sp3);
            }
            if (i==3){

                holder.sp4.setVisibility(View.VISIBLE);
                //loading the image
                Glide.with(context)
                        .load(url_sports+deportes[i])
                        .into(holder.sp4);
            }
            if (i==4){
                holder.sp5.setVisibility(View.VISIBLE);
                //loading the image
                Glide.with(context)
                        .load(url_sports+deportes[i])
                        .into(holder.sp5);
            }
            if (i==5){
                holder.sp6.setVisibility(View.VISIBLE);
                //loading the image
                Glide.with(context)
                        .load(url_sports+deportes[i])
                        .into(holder.sp6);
            }
            if (i==6){
                holder.sp7.setVisibility(View.VISIBLE);
                //loading the image
                Glide.with(context)
                        .load(url_sports+deportes[i])
                        .into(holder.sp7);
            }
            if (i==7){
                holder.sp8.setVisibility(View.VISIBLE);
                //loading the image
                Glide.with(context)
                        .load(url_sports+deportes[i])
                        .into(holder.sp8);
            }

        }


        Glide.with(context)
                .load(url_sports+sporticon)
                .into(holder.sport_spot);

        Glide.with(context)
                .load(url_spot_types+spottypelogo)
                .into(holder.tipo_spot);

        holder.SubjectName.setText(getDataAdapter1.getusername());
        holder.txtDate.setText(getDataAdapter1.getdate_post());
        holder.txtDescription.setText(getDataAdapter1.getdescription_post());
        holder.spot.setText(spotshortname+", "+city_spot+", "+country_spot);

        holder.profile_image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, profile_image, Toast.LENGTH_LONG).show();
            }
        });
        holder.SubjectName.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, profile_image, Toast.LENGTH_LONG).show();
            }
        });


        String url = "https://.../usuarios/";
        //loading the image
        Glide.with(context)
                .load(url+profile_image)
                .into(holder.profile_image);

//fire


        holder.fire.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                id_post_fire = id_post;
             //   Toast.makeText(context, "fire pulsado post post-user:"+id_post_fire+" "+id_usuario, Toast.LENGTH_LONG).show();
                holder.fire.setImageResource(R.drawable.home_fire_desactivado);
                update_fire_post();
            }
        });
//put user on spot
        holder.fix_pin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                id_spot_put_user= id_post;
                //   Toast.makeText(context, "fire pulsado post post-user:"+id_post_fire+" "+id_usuario, Toast.LENGTH_LONG).show();
                holder.fix_pin.setImageResource(R.drawable.home_checked);
                put_user_on_spot();
            }
        });




        holder.viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {





            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

        sliderImg = new ArrayList<>();

        sendRequest( holder,  position);

    }
mvasco
  • 4,965
  • 7
  • 59
  • 120

1 Answers1

0

the reason is that recyclerView is a component that reusethe views, for this reason you need develop thinking it, in this case you should start and manager viewpager inside of ViewHolder thinking that the method in Adapter#onBindViewHolder() ever start the holder at a first time, this depending of position for example if the position is 20 and need show a ViewPager you should fill and configurate the ViewPager in the method onBindViewHolder that have a parameter of position.

Or if you need disable the feature of recycling check this https://stackoverflow.com/a/36313437/6417269

paste your code for specific explanation

  • Would you mind giving me an explanation about disable feature? I have taken a look at the proposed link but I don´t get how to use it in my case. – mvasco Oct 23 '19 at 17:55