Java Android和获取id转换为字符串的视图
在Android项目的Java代码中,如果您想要查看资源的引用,可以执行以下操作: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",
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常量),而是会调用一组可能会使用反射来获取常量值的方法。另见