我有一个xml布局,它将在tablerows中显示由textviews组成的网格。 textview名称是cell00,cell01等。在运行时,我的程序将确定需要更改哪个单元格。
有没有办法让格式化一个名称,以便它可以在运行时传递给findViewById方法?例如,如果需要cell00,我该如何在此代码中生成parm?
TextView currcell = (TextView) findViewById(R.id.cell00)
“cell”+00之类的东西无法编译,因为findViewById方法不接受String类型。我不希望在程序中硬编码网格中的每个textview名称 - 必须有更好的方法。
感谢您提供任何帮助。
答案 0 :(得分:4)
您可以使用反射在R.id。
中查找命名变量的整数值Class clazz = R.id.class;
Field f = clazz.getField("cell" + "00");
int id = f.getInt(null); // pass in null, since field is a static field.
TextView currcell = (TextView) findViewById(id);
请记住,反射可能很慢。如果你做了很多,你可能想要缓存值或以不同的方式提出。
答案 1 :(得分:3)
int id = getResources().getIdentifier("cell00", "id", getPackageName());
TextView currcell = (TextView) findViewById(id);
与Mayra一样,代码也使用反射,所以要小心。