Просмотреть пейджер уничтожить предметы, когда я прокручиваю вниз - PullRequest
0 голосов
/ 08 мая 2018

Я использую ползунок изображения внутри окна просмотра переработчика, каждый элемент имеет пейджер просмотра и свой собственный ползунок изображения, после загрузки всех предметов в представлении переработчика.Первый элемент отображает слайдер изображения внутри его пейджера просмотра. Затем я прокручиваю вниз до других элементов, возможно, до элемента 10 или 11, а затем прокручиваю до первого элемента, затем просматриваю пейджер, уничтожая все элементы или фрагменты внутри него, и теперь изображение не отображается.Пожалуйста, дайте мне решение для этого, мой код адаптера.Пользователь FragmentStatePagerAdapter не может работать, поскольку не имеет доступа к диспетчеру фрагментов

    private class ViewPagerAdapter extends PagerAdapter {


   ArrayList<ImageInfo> allImages=new ArrayList<>();




    private ViewPagerAdapter(ArrayList<ImageInfo> allImages){
        this.allImages = allImages;
    }

    @Override
    public int getCount() {
        return allImages.size();
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        View itemView = LayoutInflater.from(myContext).inflate(R.layout.fragment_big_row_image, container, false);

        ImageView imageListing = (ImageView) itemView.findViewById(R.id.imageListing);


        //MH: Loading Images in slider
        if(allImages.get(position).csImageFull.length()>0)
        {
            CommonMethods.ShowImage(myContext, imageListing, allImages.get(position).csImageFull);

        }
        else
        {
            CommonMethods.ShowImage(myContext, imageListing, allImages.get(position).csImageMedium);

        }

        container.addView(itemView);

        return itemView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
       // ((ViewPager) container).removeView((View) object);
       // instantiateItem(container,position);
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }
}

   /*****************************************************************************************************/

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Попробуйте ниже код:

public class SliderPagerAdapter extends PagerAdapter {

    private Activity activity;
    private ArrayList<String> images;

    public SliderPagerAdapter(Activity activity) {
        this.activity = activity;

    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {

        View view = LayoutInflater.from(container.getContext())
                .inflate(R.layout.item_slider, container, false);
        ImageView allImages = null;

      /MH: Loading Images in slider
        if(images.get(position).csImageFull.length()>0)
        {
            CommonMethods.ShowImage(myContext, imageListing, allImages.get(position).csImageFull);

        }
        else
        {
            CommonMethods.ShowImage(myContext, allImages, images.get(position).csImageMedium);

        }

        container.addView(itemView);



        return view;
    }

    public void setData(ArrayList<String> images) {
        this.images = images;
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return images == null ? 0 : images.size();
    }

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object obj) {
        return view == obj;
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        View view = (View) object;
        container.removeView(view);
    }
}

Вызовите метод setData из действия и установите массив изображений.

Adapter.setData(yourData);
0 голосов
/ 08 мая 2018

Отключите экранные страницы в вашем пейджере. Ограничение за пределами страницы определяет, сколько страниц вы хотите сохранить в памяти в вашем пейджере. Установите для этого номера желаемое количество страниц.

mViewPager = (ViewPager)findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(2);

Здесь пейджер просмотра сохранит в памяти последние 2 посещенных страницы и не уничтожит их.

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