getString()与路径连接?

时间:2019-03-09 10:09:21

标签: android string textview

使用路径连接方法在Android中引用字符串资源(xml)的最佳方法是什么?

场景
我在xml中有多个字符串资源:

<string name="testString1">Test 1</string>
<string name="testString2">Test 2</string>
<string name="testString3">Test 3</string>

在我的应用程序中,我希望用户根据他们的选择来选择要返回的字符串资源。但是,将有数百种选择。所以我正在寻找某种:

textView.setText(getString(R.string.testString + selection));

任何建议都受到欢迎,
干杯

3 个答案:

答案 0 :(得分:1)

摘自getIdentifier Android文档。

  

getIdentifier

public int getIdentifier (String name, 
                String defType, 
                String defPackage)
     

返回给定资源名称的资源标识符。一个充分   合格的资源名称的格式为“ package:type / entry”。首先   如果defType和两个组件(包和类型)是可选的   defPackage分别在此处指定。

解决方案:编写一种方法来根据给定的选择(例如1、2、3)来获取设计的字符串。

public String getStringBasedOnSelection(int selection) {
    String name = "testString" + selection;
    int resId = getResources().getIdentifier(name, "string", getPackageName());
    return getString(resId);
}

在代码中使用

Log.i(TAG, getStringBasedOnSelection(1));
Log.i(TAG, getStringBasedOnSelection(2));
Log.i(TAG, getStringBasedOnSelection(3));

答案 1 :(得分:0)

将这三行全部设为

<string name="testString">Test %d</string>

这种用法

textView.setText(String.format(getString(R.string.project_id), selection)));

答案 2 :(得分:0)

您要通过字符串获取字符串资源标识符,该标识符始终是整数。 假设您在Activity类中:

int id = getResources().getIdentifier(selection, "string", getPackageName());
if (id != -1)
{
    textView.setText(getString(id));
}

getResources()是在Context类中定义的方法,该方法返回一个Resources对象。由于我以为您正在使用Activity类(它是Context的子类)中的内容,因此您可以调用getResources()以及getString(),而不必添加{{1 }}实例。

Context是一个类,它定义了一组现在对您有用的方法,例如Resources。看一下official documentation。 请小心检查不存在的资源。如果找不到资源,此方法将返回-1!