Viewpager внутри recyclerView исчезает при прокрутке вверх или вниз - PullRequest
0 голосов
/ 23 октября 2019

Я работаю над приложением для Android.

Имеется окно recyclerView, в каждом элементе recyclerView есть ViewPager, который отображает изображение или видео на каждой странице. Все элементы мультимедиа загружаются с удаленного сервера в режиме реального времени.

При первой загрузке действия просмотрщик успешно загружает все страницы. Затем, при прокрутке вниз или вверх по представлению реселлера, бывают случаи, когда видовой пейджер не отображается внутри элемента просмотра рециркулятора.

Например, в пункте № 1 видовой пейджер показывает 5 изображений (5 страниц, на каждой странице изображение, прокручивая виджет влево или вправо), пункт № 2 показывает 3 изображения, элемент № 3 не показываетпейджер, потому что у него нет картинок. Каждый элемент занимает только высоту экрана устройства, затем прокручивая назад к первому элементу, я вижу, что на элементе № 1 не отображается видоискатель.

Если я перехожу к другому виду деятельности и затем возвращаюсь кПервое действие, просмотрщик снова работает.

Чего мне не хватает в моем коде, чтобы заставить его работать после прокрутки вверх и вниз в окне повторного просмотра?

Какую часть кода вам нужно взятьболее глубокий взгляд на источник проблемы?

РЕДАКТИРОВАТЬ

 @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);

    }

1 Ответ

0 голосов
/ 23 октября 2019

причина в том, что recyclerView - это компонент, который переустанавливает представления, по этой причине вам нужно развить свое мышление, в этом случае вам следует запустить и управлять viewpager внутри ViewHolder, думая, что метод в Adapter # onBindViewHolder () когда-нибудь запустит держательв первый раз, это зависит от позиции, например, если позиция 20 и вам нужно показать ViewPager, вы должны заполнить и настроить ViewPager в методе onBindViewHolder, который имеет параметр позиции.

Или, если вам нужно отключитьвозможность утилизации проверить это https://stackoverflow.com/a/36313437/6417269

вставить свой код для конкретного объяснения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...