通过 getResources 和 getIdentifier 检索时,资源字符串设置为“0”
Resource string is set to "0" when retrieving via getResources and getIdentifier
我正在 Android Studio 中使用 Java 进行编程。
我只是不明白,为什么会这样:
我的 setText()
方法的结果始终相同:“0”显示为按钮文本。
我按钮的setText
方法:
button_adj1.setText(String.valueOf(getResources().getIdentifier("adj"+ counter,"String", getPackageName())));
计数器变量正常工作并在点击后递增,这应该会在第二次点击时提取 counter+1
项。
如果我将 counter
替换为例如3
,结果也是0
.
硬编码尝试:
button_adj1.setText(String.valueOf(getResources().getIdentifier("adj"+ 3,"String", getPackageName())));
资源文件:res/strings.xml
:
<string name="adj1">Test0</string>
<string name="adj2"Test1</string>
<string name="adj3">Test2</string>
<string name="adj4">Test3</string>
<string name="adj5">Test4</string>
<string name="adj6">Test5</string>
<string name="adj7">Test6</string>
<string name="adj8">Test7</string>
<string name="adj9">Test8</string>
<string name="adj10">Test</string>
还有其他方法吗?
我以为String.valueOf
是把getResources.getIdentifier
的结果转成字符串?
尝试将其更改为:
button_adj1.setText(String.valueOf(getResources().getIdentifier("adj"+ counter,"String", getPackageName())));
收件人:
button_adj1.setText(getResources().getIdentifier("adj"+ counter,"string", getPackageName()));
变化:
- 在对
getIdentifier()
的调用中使用“string”而不是“String” -> 这解决了将 TextView
设置为 0
的问题
- 删除
valueOf
并将字符串的资源 ID 传递给 setText()
-> 这可以防止 TextView
被设置为 2131755036
例如
setText()
有几个不同的重载。但是你想确保调用这个:
public final void setText (int resid)
不是这个:
public final void setText (CharSequence text)
另一方面,如果您想使用后者重载,则必须调用 getString()
并传递资源 ID 的整数值。
我正在 Android Studio 中使用 Java 进行编程。
我只是不明白,为什么会这样:
我的 setText()
方法的结果始终相同:“0”显示为按钮文本。
我按钮的setText
方法:
button_adj1.setText(String.valueOf(getResources().getIdentifier("adj"+ counter,"String", getPackageName())));
计数器变量正常工作并在点击后递增,这应该会在第二次点击时提取 counter+1
项。
如果我将 counter
替换为例如3
,结果也是0
.
硬编码尝试:
button_adj1.setText(String.valueOf(getResources().getIdentifier("adj"+ 3,"String", getPackageName())));
资源文件:res/strings.xml
:
<string name="adj1">Test0</string>
<string name="adj2"Test1</string>
<string name="adj3">Test2</string>
<string name="adj4">Test3</string>
<string name="adj5">Test4</string>
<string name="adj6">Test5</string>
<string name="adj7">Test6</string>
<string name="adj8">Test7</string>
<string name="adj9">Test8</string>
<string name="adj10">Test</string>
还有其他方法吗?
我以为String.valueOf
是把getResources.getIdentifier
的结果转成字符串?
尝试将其更改为:
button_adj1.setText(String.valueOf(getResources().getIdentifier("adj"+ counter,"String", getPackageName())));
收件人:
button_adj1.setText(getResources().getIdentifier("adj"+ counter,"string", getPackageName()));
变化:
- 在对
getIdentifier()
的调用中使用“string”而不是“String” -> 这解决了将TextView
设置为0
的问题
- 删除
valueOf
并将字符串的资源 ID 传递给setText()
-> 这可以防止TextView
被设置为2131755036
例如
setText()
有几个不同的重载。但是你想确保调用这个:
public final void setText (int resid)
不是这个:
public final void setText (CharSequence text)
另一方面,如果您想使用后者重载,则必须调用 getString()
并传递资源 ID 的整数值。