2012-04-05 125 views
0

我試圖做這樣的事情如何通過名稱引用從XML獲取字符串?

public class CytatCore { 

    public static void cytatCore(int number, TextView tv) { 

     tv.setText(R.string.text+number); 
    } 
} 

我有很多命名XML字符串e.g「text1」中的「文本2」等,只有最後一個值發生變化。我試圖用兩種方法做到這一點,但我仍然在代碼中遇到錯誤。

回答

2

我對您要完成,因爲您的問題沒有寫清楚是什麼有點糊塗,但我會採取刺傷在黑暗中,並假設你的問題是

我如何將一個數字附加到XML中的字符串的末尾?

編輯:我的假設是錯誤的,看來你的問題是相當

如何按名稱引用得到一個字符串從XML?

使用ContextgetIdentifier()方法將查找一個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); 
    } 
} 
+1

不,在xml文件中我有這樣的'一些文字'和'一些text2'我想選擇一個,它將被選擇取決於'INT號碼' – 2012-04-05 18:32:55

+0

Gotcha,我更新了我的答案 – 2012-04-05 18:36:58

+1

謝謝你幫助了很多:)我長時間停頓在編程爲Android 。 – 2012-04-05 18:46:35

0

嘗試將名稱中的數組:

... 
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); 
} 
+0

這不會工作,因爲「文本」是一個變量名不是一個真正的字符串名稱,你可以動態改變 – Cata 2012-04-05 18:26:58

+1

我知道我可以以這種方式做到這一點(或但我正在尋找最簡單的方法:) – 2012-04-05 18:28:21

+0

@Cata我編輯了它 – 2012-04-05 18:28:32

3

我覺得跟隨着代碼WIL爲你工作

switch(number) { 
    case 1 : tv.setText(R.string.text1); 
    case 2 : tv.setText(R.string.text2); 
} 

在使用此類型代碼時,還要將text1,text2放入您的R.string中;開關盒也處理得更快。

+0

它爲你工作? – 2012-04-05 18:27:00

+1

是的,我試圖避免這:P這就是爲什麼我寫在這裏:D – 2012-04-05 18:29:21

1

你有另一種選擇是去的Resources對象的引用和使用方法getIdentifier()。如果你是在一個活動,那麼你可以這樣做:

public void cytatCore(int number, TextView tv) {  
    int id = getResources().getIdentifier("text" + 1, "string", this.getPackageName()); 
    t.setText(id); 
} 
相關問題