网上看了好多刷新的案例,按照他们的想法逐个去试,没有任何一个可以满足要求。我的是viewpager 里面去加载Fragment,
public class PhotoFragment extends Fragment { private static final String PHOTO_PATH = "photoPath"; private CacheUtils mPreviewCache; private String photoPath; private RequestOptions mOptions; private OnPhotoTapListener mOnPhotoTapListener; private PhotoView mPhotoView; public static PhotoFragment getInstance(@NonNull String photoPath) { PhotoFragment photoFragment = new PhotoFragment(); Bundle bundle = new Bundle(); bundle.putString(PHOTO_PATH, photoPath); photoFragment.setArguments(bundle); return photoFragment; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); photoPath = getArguments().getString(PHOTO_PATH); LogUtils.file(photoPath + ""); mPreviewCache = CacheUtils.getInstance(new File(SDCardUtils.getAppCachePath() + File.separator + "CACHE_PREVIEW_IMG")); initGlidOptions(); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { LogUtils.file("PhotoFragment,onCreateView"); mPhotoView = new PhotoView(container.getContext()); Glide.with(container.getContext()).load(photoPath).apply(mOptions).into(mPhotoView); return mPhotoView; } private void initGlidOptions() { mOptions = new RequestOptions() .skipMemoryCache(true) .centerCrop() .placeholder(R.drawable.pic_place_holder) .error(R.drawable.pic_place_holder) .diskCacheStrategy(DiskCacheStrategy.NONE); }
按照网上的做法 直接重写:
@Override public int getItemPosition(Object object) { return POSITION_NONE; }然后运行,打印日志,也销毁了当前页面 也重新执行了 oncreateView,但是页面上仍然是没有图片。(可能我的比较复杂,先要从一个usb 链接的盒子里面把预览图取出来放到sd卡里面,取完之后刷新界面),以为是Glide 缓存的原因 就清空了缓存,然而还是无效,突然想到会不会是下载好了图片但是sd卡没刷新的问题?于是在刷新之前加了以下代码:
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); intent.setData(Uri.fromFile(new File(photoPath))); this.sendBroadcast(intent);
但是加载的还是空的,比较郁闷,于是去看刷新的时机,发现存到sd 的时候是异步的,也就是说在开始保存的时候就已经去刷新了,这个时候图片还没保存完成,于是将调用时机改成保存完之后再去刷新,还是不行,那么再加上刷新sd卡的代码,竟然就行了。