【问题标题】:Resource string is set to "0" when retrieving via getResources and getIdentifier通过 getResources 和 getIdentifier 检索时,资源字符串设置为“0”
【发布时间】:2021-02-25 22:26:42
【问题描述】:

我正在 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 的结果转换成字符串?

【问题讨论】:

标签: java android android-resources android-button


【解决方案1】:

尝试将其更改为:

button_adj1.setText(String.valueOf(getResources().getIdentifier("adj"+ counter,"String", getPackageName())));

收件人:

button_adj1.setText(getResources().getIdentifier("adj"+ counter,"string", getPackageName()));

变化:

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

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

public final void setText (int resid)

不是这个:

public final void setText (CharSequence text)

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

TextView Docs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多