通过 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()));

变化:

  1. 在对 getIdentifier() 的调用中使用“string”而不是“String” -> 这解决了将 TextView 设置为 0
  2. 的问题
  3. 删除 valueOf 并将字符串的资源 ID 传递给 setText() -> 这可以防止 TextView 被设置为 2131755036 例如

setText() 有几个不同的重载。但是你想确保调用这个:

public final void setText (int resid)

不是这个:

public final void setText (CharSequence text)

另一方面,如果您想使用后者重载,则必须调用 getString() 并传递资源 ID 的整数值。

TextView Docs