我試圖做這樣的事情如何通過名稱引用從XML獲取字符串?
public class CytatCore {
public static void cytatCore(int number, TextView tv) {
tv.setText(R.string.text+number);
}
}
我有很多命名XML字符串e.g「text1」中的「文本2」等,只有最後一個值發生變化。我試圖用兩種方法做到這一點,但我仍然在代碼中遇到錯誤。
我試圖做這樣的事情如何通過名稱引用從XML獲取字符串?
public class CytatCore {
public static void cytatCore(int number, TextView tv) {
tv.setText(R.string.text+number);
}
}
我有很多命名XML字符串e.g「text1」中的「文本2」等,只有最後一個值發生變化。我試圖用兩種方法做到這一點,但我仍然在代碼中遇到錯誤。
我對您要完成,因爲您的問題沒有寫清楚是什麼有點糊塗,但我會採取刺傷在黑暗中,並假設你的問題是
我如何將一個數字附加到XML中的字符串的末尾?
編輯:我的假設是錯誤的,看來你的問題是相當
如何按名稱引用得到一個字符串從XML?
使用Context
的getIdentifier()
方法將查找一個ID名字......但警告說,不推薦使用此操作,如果它的使用非常頻繁,因爲它是緩慢的。
public class CytatCore {
public static void cytatCore(Context context, int number, TextView tv) {
int textId = context.getResources().getIdentifier("text" + number, "string", context.getPackageName());
tv.setText(textId);
}
}
嘗試將名稱中的數組:
...
private String[] ids = new String[N];
for (int i = 0; i < N; i++) {
ids[i] = context.getString(R.string.resource_name) + i;
}
然後:
...
public static void cytatCore(int i, TextView tv) {
tv.setText(ids[i]);
}
或者乾脆:
...
public static void cytatCore(int i, TextView tv) {
tv.setText(context.getString(R.string.resource_name) + i);
}
這不會工作,因爲「文本」是一個變量名不是一個真正的字符串名稱,你可以動態改變 – Cata 2012-04-05 18:26:58
我知道我可以以這種方式做到這一點(或但我正在尋找最簡單的方法:) – 2012-04-05 18:28:21
@Cata我編輯了它 – 2012-04-05 18:28:32
我覺得跟隨着代碼WIL爲你工作
switch(number) {
case 1 : tv.setText(R.string.text1);
case 2 : tv.setText(R.string.text2);
}
在使用此類型代碼時,還要將text1,text2放入您的R.string中;開關盒也處理得更快。
它爲你工作? – 2012-04-05 18:27:00
是的,我試圖避免這:P這就是爲什麼我寫在這裏:D – 2012-04-05 18:29:21
你有另一種選擇是去的Resources
對象的引用和使用方法getIdentifier()
。如果你是在一個活動,那麼你可以這樣做:
public void cytatCore(int number, TextView tv) {
int id = getResources().getIdentifier("text" + 1, "string", this.getPackageName());
t.setText(id);
}
不,在xml文件中我有這樣的'一些文字 '和'一些text2 '我想選擇一個,它將被選擇取決於'INT號碼' –
2012-04-05 18:32:55
Gotcha,我更新了我的答案 – 2012-04-05 18:36:58
謝謝你幫助了很多:)我長時間停頓在編程爲Android 。 – 2012-04-05 18:46:35