取消Android Volley中的NetworkImageView请求

时间:2013-07-05 08:38:06

标签: android networkimageview

我想知道在Volley中取消执行中的NetworkImageView请求的正确方法。

我有一个片段用一些文本填充listview(通过使用Volley的JSON RPC调用检索),每个列表项都有一个NetworkImageView。

在我的片段的onPause()中,我有:

@Override
public void onPause() {
    super.onPause();

    VolleyRequestManager.getRequestQueue().cancelAll(this);
}

我对文本的每个JSON请求都相应地设置了标记:

    mRequest = new JsonRpcRequest<Data>(Method.POST,
            jsonRpcRequestBody,
            Dataclass.class,
            createSuccessListener(),
            createErrorListener());
    mRequest.setTag(this);
    VolleyRequestManager.getRequestQueue().add(mRequest);

问题是;使用我的布局XML资源文件中定义的NetworkImageView,它们不会与JSON请求共享相同的标记,因此我相信它们不会在我的onPause()代码上取消,而是触发cancelAll(this)。有没有办法以某种方式取消相应的NetworkImageViews?或者我是否需要破解Volley的代码来添加取消所有请求的方法,而忽略标记比较?

1 个答案:

答案 0 :(得分:6)

从视图层次结构分离时自动取消NetworkImageView。

根据Ficus Kirkpatrick(Google Play应用工程师)的Google IO演示文稿,NetworkImageView在从视图层次结构中分离时自动取消正在进行的请求。

@ 16:35 ish in the video

http://www.youtube.com/watch?v=yhv8l9F44qo&list=PLWz5rJ2EKKc9rkwO9yBosRvkQBJd5utmR&feature=player_detailpage#t=999

如果您需要更多控制权,我不确定如何在排球Tag上设置ImageLoader,但我现在正在研究这个问题(为什么我遇到了这个问题)。如果我找到了什么,会更新我的答案。但是,内置的自动取消似乎是取消大多数图像请求的最合适的地方。