ImageView no longer exists. You should not use this PhotoViewAttacher any more

博客讨论了在Android开发中遇到ImageView不再适用的问题,特别是在使用PhotoView和ViewPager时。作者建议根据GitHub上的解决方案,更新 PhotoviewAttacher 的 cleanup 方法来解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考GitHub的解决方法

把PhotoviewAttacher 类中的cleanup()方法替代成下面的方法

@SuppressLint("NewApi")
    @SuppressWarnings("deprecation")
    public final void cleanup() {
        if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN)
        {
            if (null != mImageView) {
                mImageView.get().getViewTreeObserver().removeOnGlobalLayoutListener(this);
            }

            if (null != mViewTreeObserver && mViewTreeObserver.isAlive()) {
                mViewTreeObserver.removeOnGlobalLayoutListener(this);

                mViewTreeObserver = null;

                // Clear listeners too
                mMatrixChangeListener = null;
                mPhotoTapListener = null;
                mViewTapListener = null;
                // Finally, clear ImageView
                mImageView = null;
            }

        }
        else
        {
            if (null != mImageView) {
                mImageView.get().getViewTreeObserver().removeGlobalOnLayoutListener(this);
            }

            if (null != mViewTreeObserver && mViewTreeObserver.isAlive()) {
                mViewTreeObserver.removeGlobalOnLayoutListener(this);

                mViewTreeObserver = null;

                // Clear listeners too
                mMatrixChangeListener = null;
                mPhotoTapListener = null;
                mViewTapListener = null;
                // Finally, clear ImageView
                mImageView = null;
            }
        }
    }