0

OK時,試圖從我的SD卡圖像在活動ListView顯現。生命週期使用SimpleCursorAdapter.setViewImage

我正在閱讀很多提示,但我錯過了一個重要的塊。我很想看到一小段代碼說明了這一點,還沒有發現任何東西。

從我的研究,它聽起來就像當執行listview.setadapter(SimpleCursorAdapter adapter)bindview()被調用。該文檔說如果ViewBinder無法處理ImageViewsetImageViewbindview調用。

您的FROM陣列中指定字段中,TO陣列中的TextViewid,所述Cursor,並與TextView視圖組。然後將適配器設置爲ListView,然後發生。

我想調用順序則是: listView.setAdapter(SimpleCursorAdapter adapter)->adapter.bindView()->adapter.setTextView

Bindview必須確定視圖的類型TextView, determine that it can bind it, passes the的TextView and text value from the cursor and setTextView`做的事情。

所以,這使得呼籲的ImageView非常相似的,對不對?

listViw.setAdapter(SimpleCursorAdapter adapter)->adapter.bindView()->adapter.setImageView 

所以,當bindView遇到和ImageView類型的對象,它有什麼作用?是否有像setTextView這樣的默認實現?我想這很難做到,圖像差別很大。文字是文字,但圖像有格式,大小,深度,比例,位置等等。傳遞給setTextView的字符串是文本,有效載荷。在圖像中,字符串(可能)是文件名,只是圖像的起點。

我想我會需要建立我的適配器與持有FROM文件名中的數據庫列名。 TO數組在我的佈局中將只有ImageView的ID。我想我可以使用默認的viewbinder bindview(),但必須覆蓋setImageView()採取期望的字符串(文件名),並打造出了圖像加載線找到預期的應用程序路徑圖像名稱。

所以這將是(也許):

listView.setAdapter(MyOwnSimpleCursorAdapter myOwnAdapter)->myOwnAdapter.super.bindView()->myOwnAdapter.setImageView() 

這聽起來是正確的?如果任何人都可以填補缺失的空白和/或提供一些工作的源代碼,這將有很大幫助。順便說一句,我已經寫了代碼來做到這一點,但它不起作用。這可能是一個非常簡單的錯誤,如果它可行,不想停止這個線程。我想我只需要在正確的方向上輕輕一點。

回答

4

我不太明白什麼是你的問題(是的,你應該張貼的代碼失敗件),所以這裏是我的回答(你也可以看到這個在SimpleCursorAdapter的源代碼):

SimpleCursorAdapterListView要求要顯示getView()將被調用的方法新View。此方法將行構建委託給兩種方法:newView()(它將創建View(使您設置的xml佈局膨脹),並設置爲View的陣列,其中ids的陣列爲to)和bindView()(其中將實際上將數據綁定到由newView()創建的View)。然後

bindView()將通過View秒(View s的從to陣列id多個)在其上結合該數據陣列迭代。它也會從光標處調用getString(並且只有getString方法,這很重要)來獲取數據。接下來,該方法檢查是否在適配器上設置了ViewBinder,如果是這種情況,則會讓ViewBinder設置數據(如果ViewBinder成功綁定數據,則不會調用方法setTextView()setImageView())。

如果ViewBinder未設置適配器或ViewBinder回報false(意爲ViewBinder失敗)的setViewValue方法上則bindView()方法檢查,看看它在處理(TextViewImageView哪種類型的View )並致電setViewText()setViewImage()

setViewImage()的實施將嘗試解析提供的字符串作爲一個int(例如:圖像ID R.drawable.image)和如果失敗,將然後解析String作爲Uri並在ImageView使用setImageUri()。因此intR.drawable.imageString"file://mnt/sdcard/photo100.jpg"應與SimpleCursorAdapter的默認實現一起使用,否則覆蓋setImageView

+0

太好了,謝謝你的詳細回答,特別是考慮到我的問題很難找到所有這些措詞。這個問題有點兒「這聽起來不錯嗎?」 我不知道調用getView()和newView(),但關於setViewImage如何超級有用的額外細節。我還沒有去源代碼的答案,只是文件。另一個好的提示... – JustSomeGuy 2012-04-02 20:05:28

+0

我的代碼也沒有失敗,本身,它只是沒有顯示任何圖像。這是因爲從數據庫返回的字符串只是文件名,而不是Uri的「photo100.jpg」與「file://mnt/sdcard/photo100.jpg」。 我將切換到存儲圖像的完整路徑,如果我決定支持多個位置的圖像,這將更好。 – JustSomeGuy 2012-04-02 20:32:25