首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重新加载NetworkImageView

如何重新加载NetworkImageView
EN

Stack Overflow用户
提问于 2015-02-28 18:55:39
回答 2查看 996关注 0票数 0

我有一个应用程序,它用来自android的一个NetworkImageView小部件显示片段。

在NetworkImageView中加载的图像是每5秒改变一次,所以我想通过按下在操作栏中创建的“重新加载”按钮来提升这个图像。

我发现了两个问题:

  1. 如果我再次调用此代码来加载映像(在onActivityCreated()方法中创建该片段时已经调用了它): getView().findViewById(R.id.networkImageView);mImageLoader = VolleySingleton.getInstance(getActivity()).getImageLoader();mNetworkImageView.setImageUrl(IMAGE_URL,mImageLoader);

所以不会发生任何事情(这不是该链接的实际IMG ),我认为这是因为它现在是从缓存加载IMG而不是从internet加载IMG。

  1. 如果我调用片段reload()方法,那么: 公开空洞重新加载(){ getView().findViewById(R.id.networkImageView);活动= ( MainActivity ) getActivity();IMAGE_URL = activity.getMyData();mNetworkImageView = (NetworkImageView) activity.getMyData mImageLoader = VolleySingleton.getInstance(getActivity()).getImageLoader();mNetworkImageView.setImageUrl(IMAGE_URL,mImageLoader);

来自MainActivity:

代码语言:javascript
复制
public boolean onOptionsItemSelected(MenuItem item) {        
    int id = item.getItemId();

    if (id == R.id.action_settings) {
        return true;
    }

    if (id == R.id.action_reload) {
        ViewFragment fragment = new ViewFragment();
        fragment.reload();
    }

    return super.onOptionsItemSelected(item);
}

应用程序获得NullPointerException错误后,单击动作栏重新加载按钮。

方法是我希望重新加载NetworkImageView的地方。

有人能解释一下如何纠正这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-28 19:28:13

首先从cache获得request queue

然后,通过从缓存中调用URL函数(键是您的url)从cache中删除remove

然后使用你的第一种方法:

代码语言:javascript
复制
mNetworkImageView = (NetworkImageView) getView().findViewById(R.id.networkImageView);
mImageLoader = VolleySingleton.getInstance(getActivity()).getImageLoader();
mNetworkImageView.setImageUrl(IMAGE_URL, mImageLoader);
票数 1
EN

Stack Overflow用户

发布于 2016-05-09 07:26:33

这个问题和答案看起来很陈旧,但这些答案对我的项目不起作用。

为了你的帮助,我在这里写了我的解决方案。

问题是Volley的NetworkImageView将图像缓存为一个映射,并且没有用于init缓存映射的API。

因此,我的解决方案是创建自定义缓存类,其中包括removeCacheAll()。

代码语言:javascript
复制
public class ImageCacheTrunk implements ImageLoader.ImageCache {

    @Override
    public void putBitmap(String url, Bitmap bitmap) {
        mCache.put(url, bitmap);

    }

    @Override
    public Bitmap getBitmap(String url) {
    return mCache.get(url);
    }

    public void removeCacheAll() {
        mCache.evictAll();
    }
}

并在需要重新加载之前调用removeCacheAll方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28785548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档