[英]Map keys from the server to resources
請考慮以下事實:您擁有從中獲取數據的API,並且API本身返回某些密鑰,接收方客戶端應使用這些密鑰“解析”要呈現給用戶的人類可讀字符串。
例如,鍵可能看起來像這樣:
DOMAIN_TYPE_SUBTYPE_ID
然后對應於strings.xml
的給定條目:
<string name="domain_type_subtype_id">This magical item</string>
不幸的是,人類可讀的值本身並沒有從API傳遞(也不需要翻譯),但是我試圖找出關於如何將鍵映射到值的最佳方法( R.string.abc
)以最有效的方式。
我不由自主地看到了兩種前進的方式(因為我無法更改API):
1)根據名稱進行運行時資源查找,並向所有代碼神祈禱,事情不會改變。 基本上:
Resources.getSystem().getIdentifier(keyFromTheApi.toLowerCase(), "id", getPackageName())
但是,從我所聽到和閱讀的內容來看……這確實不是一種高效的方法。 我認為在RecyclerView
設置中為多個字符串使用它是一個非常糟糕的主意。
2)在單例類中的所有數據(字符串,整數)的某個位置都有一個靜態查找字段,但是鑒於存在很多要跟蹤的鍵的事實,這可能是不幸的內存命中了嗎?
Map<String, Integer> strings = new HashMap<String, Integer>() {{
put("DOMAIN_TYPE_SUBTYPE_ID", R.string.domain_type_subtype_id);
//...
}};
🤔
關於如何以良好方式解決問題的任何建議?
感覺真的很脆弱,我會避免
我會做類似的事情,但是要用switch語句:
public static int lookupStringRes(String value) { switch (value) { case "DOMAIN_TYPE_SUBTYPE_ID": return R.string.domain_type_subtype_id; // ... default: Log.w("TAG", "Resource not found"); return -1; } }
並不是說這是最好的解決方案,而是我的頭上,這是我將要開始的解決方案。 Map vs Switch歸結為內存與性能之間的關系,您將以內存為代價在Map中進行更快的查找。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.