最近開發文件瀏覽列表一塊,其中通過接口查詢當前目錄下的所有文件和文件夾,對於文件夾我們就顯示文件夾的一些屬性:圖像是文件夾,然後可以進入他的下級目錄;但對於文件的話我們就需要根據不同的類型,例如圖片和視屏格式的圖片我們需要展示他們的縮略圖,
點擊文件的話,也是根據不同類型,可以由不同的系統應用進行打開這個網上的方式有很多。例如:
private void openFile(File file){
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//設置intent的Action屬性
intent.setAction(Intent.ACTION_VIEW);
//獲取文件file的MIME類型
String type = getMIMEType(file);
//設置intent的data和Type屬性。
intent.setDataAndType(/*uri*/Uri.fromFile(file), type);
//跳轉
startActivity(intent); //可以加個異常捕捉
在這裏本人圖片和影視的縮略圖都是通過在adapter 中通過開源框架的ImagerLoader來實現的。但是在測試過程中,一直隨機出現比如文件夾的圖片顯示的是圖片的縮略圖,這個明顯是由於getview的緩存機制導致了,重用出現了錯誤,但是歸根結底還是由於異步加載的框架導致圖片加載不是實時的,可能加載圖片的時候這個item所對應的緩存已經有所變動,所以纔出現了這種bug。
既然知道了原因我們就需要解決這個問題,怎麼來呢。看來異步加載是不能直接用了。那我們就可以換一種思路,預先緩存好對應url的bitMap 然後通過map的形式加入到list 集合中,並且可以保存起來。每次我們拿到url先做緩存,如果這個url在集合中能夠查到,那我們就直接吧對應bitmap拿出來直接加載到對應的控件上。這種加載方式就相當於我們平時直接加載資源文件一樣,肯定不會出現錯位等問題了。
通過URl 獲取bitmap 的方式我們其實在ImageLoader 框架中可以找到。有一個ImageLoader.sysImageBitmap(url,options)返回的就是一個bitMap 。