如何在viewPager中只更改一个项目?

时间:2018-01-04 11:43:16

标签: android android-viewpager notify

我使用带有图像的viewPager。我想只更改一个图像以重置缩放功能,如viewPager适配器中的notifyItemChanged。 我添加了onPageChangeListener,但我找不到使用onPageSelecteddestroyItem。我该怎么办?

MyActivity:

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageSelected(int position) {

                    //I CAN'T FIND HOW TO RESET ZOOMING IMAGE AT POSITION
                    displayMetaInfo(position);
                }

                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                }

                @Override
                public void onPageScrollStateChanged(int state) {
                }
            });

MyAdapter:

private class MyViewPagerAdapter extends PagerAdapter {

        TouchImageView photoView;

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

            LayoutInflater inflater = LayoutInflater.from(getApplicationContext());
            View view = inflater.inflate(R.layout.show_images, container, false);

            photoView = ViewUtil.findById(view, R.id.photoView);

            Image image = allImages.get(position);
            if (image != null) {

              String path = image.getPath();

              if (hasPathControl(path)) {
               setImage();
               loadImage(path, photoView);
            }

            container.addView(view);

            return view;
        }

        @Override
        public int getCount() {
            return allImages.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) {

            Mylog.i(TAG, " destroyItem position " + position);

            container.removeView((View) object);

        }

        private void loadImage(String path, TouchImageView imageView) {

            glideRequests.load(path)
                    .diskCacheStrategy(DiskCacheStrategy.NONE)
                    .dontTransform()
                    .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
                    .transition(withCrossFade())
                    .into(imageView);
        }
    }

1 个答案:

答案 0 :(得分:0)

这里我重写onPageSelected()并通过调用getChildAt()方法获取视图。

我没有测试代码,但希望这会对你有帮助。 我之前使用过TouchImageView,但没试过。

@Override
public void onPageSelected(int position) {
    if (position > 0) {
        View view = mPager.getChildAt(position);
        if (view != null) {
            TouchImageView img = (TouchImageView) view.findViewById(R.id.image);
            img.resetZoom();
        }
    }
}