Java Android和获取id转换为字符串的视图

Java Android和获取id转换为字符串的视图,java,android,layout,Java,Android,Layout,在Android项目的Java代码中,如果您想要查看资源的引用,可以执行以下操作: View addButton = findViewById(R.id.button_0); 在上面的R.id.button_中,0不是字符串。是否可以通过字符串动态引用资源,例如“R.id.button\u 0” 我想通过“R.id.button\u%I”引用一个按钮,其中%I被一些有效索引替换 int resID = getResources().getIdentifier("button_%i",

在Android项目的Java代码中,如果您想要查看资源的引用,可以执行以下操作:

View addButton = findViewById(R.id.button_0);
在上面的R.id.button_中,0不是字符串。是否可以通过字符串动态引用资源,例如“
R.id.button\u 0

我想通过“
R.id.button\u%I
”引用一个按钮,其中
%I
被一些有效索引替换

int resID = getResources().getIdentifier("button_%i",
    "id", getPackageName());
View addButton = findViewById(resID);
其中,
%i
被某个有效索引替换

int resID = getResources().getIdentifier("button_%i",
    "id", getPackageName());
View addButton = findViewById(resID);

getResources()
方法属于
Context
类,因此您可以直接从
活动中使用它。如果您不在活动中,则使用上下文访问:(
myCtxt.getResources()
)。

您可以尝试将所需的所有ID放入一个数组中,然后使用该数组动态引用您的资源。

对于某些特殊情况,这可能是一种很好的方法(资源名称更改或顺序复杂时);否则我认为这不是更好的方法。有时你会得到一个巨大的数组,这会让你的代码看起来很臭。@cristian它确实会生成可怕的代码。在我过去做过这件事的地方,我把它推到了它自己的静态类中。但是你的方法似乎更好;)@Christian:谢谢。太好了。注意这比直接使用ID要慢得多。谢谢,这正是我想要的。顺便说一句,我修复了这个代码示例中的一个编译错误。@hackbod为什么会更慢?如果您或其他人可以为您的断言指向一个doc引用,那就太好了。它会比较慢,因为它不会访问ID(这只是一个普通的Java常量),而是会调用一组可能会使用反射来获取常量值的方法。另见