2016-02-05 28 views
0

我需要顯示一個「動態文本」這是由2 R.strings和1 String可變級聯:R.string不工作的onCreate()

事實是我需要在開始顯示它,以便在onCreate()的方法,但我得到這個錯誤:

Caused by: android.content.res.Resources$NotFoundException: String resource ID # 

這就是我試圖做的:

text2.setText(R.string.still + playersAmount + R.string.LastRemaining); //Display Single 

任何想法?

回答

2

如果我告訴你先給一個電話號碼打電話,那麼另一個電話號碼,你不能總結他們並稱之爲結果。這就是你正在做的。

R.string.some_id整數映射爲字符串,並可以本地化。通過將相同的id映射到不同語言的不同值,本地化工作。它只能被解決,但如果你用它的id來查看它,那也只能這樣。修改該ID將導致無效結果:這是您看到的錯誤。

您需要分別獲取這2個字符串。

getString(R.string.first) + playersAmount + getString(R.string.second) 

然後適用字符串拼接的正常規則。

此外,你應該看看字符串格式化程序,因爲它們減少了手動連接的需要,如果你添加了多種語言,會導致問題。

<string name="formatted_string">I have %d players</string> 

也可以用這樣的:

context.getString(R.string.formatted_string, playersAmount); 
+0

只需要將'id'編輯爲'name',但是它的作用就像是一種魅力,而且它現在用第二種格式很乾淨,謝謝! – FET

+0

@FET對!修復。 –

1

呼叫getResources().getString(R.string.still)

getResources().getString(R.string.LastRemaining)

否則你只是從R.java引用一個整數值,將其添加到playersAmount,然後加入從R.java和Android其他整數值正在尋找這筆整數作爲字符串資源ID。

+0

這只是在OnCreate()或整個代碼? – FET

+0

@FET請參閱我添加的簡短描述,希望這有助於解釋爲什麼這不適用於您 –

+0

是的,好吧,謝謝! – FET

0

解決您的問題(即建立在inner_class7的解釋)更完整的解釋是,你需要做到以下幾點:

// Get Strings from resources 
String still = getResources().getString(R.sting.still); 
String lastRemaining = getResources.getString(R.string.LastRemaining); 

// Concatenate Strings and set on TextView 
text2.setText(still + playersAmount + lastRemaining); 

正如他所說,當你說R.string.still時,你真的在​​談論一個整數引用,這不是你想要在這裏做的。這裏發生的奇蹟是getString是「知道」你想要與該特定ID關聯的字符串。如果您有任何問題,請告訴我。

0

當你做R.string.still + playersAmount + R.string.LastRemaining你中庸之道添加3 int在一起(和尋找的結果的資源字符串)

如果你想獲得從資源String必須使用getString(int)

http://developer.android.com/reference/android/content/Context.html#getString(int)

爲你解決text2.setText(getString(R.string.still) + playersAmount + getString(R.string.LastRemaining));

我建議你使用一個字符串與參數<string name="stillLastRemaining">Still %d last remaining</string>和使用text2.setText(getString(R.string.stillLastRemaining, playersAmount));

相關問題