我正在爲此SO問題找到接受的答案和討論getString Outside of a Context or Activity不清楚。在模型對象中引用Strings.XML以支持本地化
我是新來的Android,我想了解如何在模型類中引用我的資源字符串,以便我可以正確支持本地化。
具體來說,我的模型有一個位置屬性,我希望能夠返回一個字符串作爲方位的指南針序號。因爲像「北」這樣的指南針序號需要進行本地化,所以我試圖將它們存儲在我的strings.xml中。
我想我明白我需要應用程序上下文來獲取資源對象,但我想知道這是不可能的,而不必傳遞上下文。在模型中存儲UI上下文似乎違反了MVC 。
爲了達到這個目的,我希望在我的模型中包含一個像這樣的方法。第一個if顯示我如何使用strings.xml條目。
public String compassOrdinalForBearing(float bearing) {
assert bearing >= 0.0 && bearing <= 360.0;
if ((bearing > 336.5) && (bearing <= 360.0))
//Problem here
return Context.getResources().getString(R.string.compass_ordinal_north);
else if ((bearing >= 0) && (bearing <= 22.5))
return "North";
else if ((bearing > 22.5) && (bearing <= 67.5))
return "Northeast";
else if ((bearing > 67.5) && (bearing <= 112.5))
return "East";
else if ((bearing > 112.5) && (bearing <= 157.5))
return "Southeast";
else if ((bearing > 157.5) && (bearing <= 202.5))
return "South";
else if ((bearing > 202.5) && (bearing <= 247.5))
return "Southwest";
else if ((bearing > 247.5) && (bearing <= 292.5))
return "West";
else if ((bearing > 292.5) && (bearing <= 337.5))
return "Northwest";
else
assert false;
return null;
}
這可能是我在SO上收到的最有幫助的答案。感謝您詳細介紹不同的方法。應用程序子類化現在完全適合我的需求。在If塊中,我只是明確地將範圍拼出來,但是這不是評估事物的最有效方式 - 可讀性和效率之間的平衡總是很棘手,所以將其最小化是一個很好的觀點。再次感謝優秀的寫作。 – Nick