ImageView.setImageURI()でviewに反映されない時

setImageURIを使っている時の小メモ。 GitHub - ArthurHub/Android-Image-Cropper: Image Cropping Library for Android, optimized for Camera / Gallery. このlibraryを使っていてカメラで撮影された画像が同じfile名で上書き保存などされる時に対応。

ImageView  |  Android Developers

ソースコードを見ればわかるのだが、URIが同じ時は改めてセットされない。

  @android.view.RemotableViewMethod(asyncImpl="setImageURIAsync")
    public void setImageURI(@Nullable Uri uri) {
        if (mResource != 0 || (mUri != uri && (uri == null || mUri == null || !uri.equals(mUri)))) {
            updateDrawable(null);
            mResource = 0;
            mUri = uri;

            final int oldWidth = mDrawableWidth;
            final int oldHeight = mDrawableHeight;

            resolveUri();

            if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeight) {
                requestLayout();
            }
            invalidate();
        }
    }

URIは同じだが中身が変わる時は

imageView.setImageURI(null)
imageView.setImageURI(uri)

一度nullするなどして mUri!=uri に引っかからないようにしないとviewに反映されない。