网上看了好多刷新的案例,按照他们的想法逐个去试,没有任何一个可以满足要求。我的是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卡的代码,竟然就行了。