2013-07-05 56 views
2

我想知道在Volley中取消正在執行的NetworkImageView請求的正確方法。在Android Volley中取消NetworkImageView請求

我有一個片段,用一些文本填充列表視圖(通過使用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?或者我需要破解沃利的代碼來添加一個方法來取消所有的請求,忽略標記比較?

回答

6

NetworkImageView在從視圖層次結構分離時自動取消。

根據Ficus Kirkpatrick(Google Play應用工程師)的Google IO演示文稿,NetworkImageView在從視圖層次結構中分離時自動取消正在進行的請求。

@視頻16:35 ISH

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

如果您需要更多的控制,我不知道如何設置一個凌空ImageLoaderTag但現在我研究這個(我爲什麼來在這個問題上)。如果我找到一些東西,我會更新我的答案但是,似乎內置的自動取消是取消大多數圖像請求的最合適的地方。

+2

這是事實。我也錯過了這一點,併爲NetworkImageViews添加了標籤,並浪費了相當長的一段時間。只有常規請求才能被標記,然後從onPause手動取消。 – slott