2017-03-18 58 views
0

我從數據庫中獲取名稱列表,並且想要爲每個名稱分配一個圖像。 我發現我們可以使用int resID = getResources().getIdentifier(imgName , "drawable", getPackageName());,但是我不得不爲一個名字分配一個圖像。如何將繪圖存儲爲可通過鍵/名稱訪問的值

在上面的代碼中,您可以通過名稱獲取drawable的資源ID。但我不想用不同的名稱存儲相同的圖像,而且我也不想使用任何數組。

有沒有什麼辦法可以通過我們指定的名字來獲取drawable的引用?

我想要做的是保持執行時間少於 可能。

+0

爲什麼你不想使用數組?我不確定有沒有一種方法可以做到這一點,沒有數組或手動編碼的東西看起來像數組。也許使用hashmap?你也可以使用SQLite來存儲它,但最後它就像一個數組,並且這將更好地使用數組... – Feuby

+0

因爲有很多圖像,我存儲在drawable中,如果我將它存儲在一個數組中我必須爲每個名稱循環數組,並增加執行時間。 –

+0

然後使用散列表(不是hashmap抱歉),它會以低成本直接從名稱給你繪圖 – Feuby

回答

0

正如問題評論中所述,對於下一個用戶:我認爲最好的解決方案是將對應關係放在Hashtable中。

Hashtable<String, Drawable> map=new Hashtable<>(SIZE); 
//iterates for each couple key/name - drawable you need 
map.put(KEY, drawable); 
//then you can access to drawables easily with the name : 
Drawable d=map.get(KEY); 

所有hashTable中的成本都與hastable數據修改:添加元素,修改元素(我甚至不能確定的更新),刪除元素。因爲你的散列似乎是固定的,所以沒有任何成本(除了內存使用)並且訪問幾乎是[恆定的,而不是線性大小]直接,就像你給出陣列中的位置一樣。

所以我認爲這是您需要的解決方案。 你可以繪製一個有多個鍵的鍵,這不是問題。然而,一個關鍵導致總是一個可繪製的。

請記住,map.put();沒有重複值(這裏可以繪製),除非它是一個原始數據。因此,對drawable進行的任何更改(如果發生某些更改)將應用於具有相同drawable的所有鍵。這可能不是問題,但是您必須知道,如果您使用散列表進行其他用法。

編輯: 由於您需要爲每個片段使用這個散列表,因此您需要創建一個抽象類,每個片段都將從其繼承,並將此hastable聲明爲該類中的受保護對象。因此,每個子類將能夠得到它。你也可以將這個散列表設置爲私有的,並實現一個函數「Drawable getDrawableFromName(String name)」,從hastable返回drawable。

我強烈建議你有一個抽象的主要子類爲你的活動,如果你需要在活動中做這樣的事情。

+0

這個問題是我必須爲每個片段實現散列表,我使用相同的值。這些片段是用於使用不同選項卡的滑動視圖。因爲我們在片段中獲取了特定的關鍵值,所以我必須使用圖像更新UI。有沒有什麼辦法只實現一次散列表並將其用於不同的片段。 –

+0

是的,有。你只需要讓所有的片段都從一​​個抽象的自定義片段類繼承而來。然後你將這個散列表定義爲受保護的靜態(最後如果你不修改它)。因此,您可以從您的所有片段中訪問它。有一個抽象類從你的所有活動繼承(而另一個爲你的所有片段),這種問題總是一個很好的實踐。更新精度的答案 – Feuby

+0

hashmaps和hashtables不推薦用於Android –

相關問題