我想以不同的方式声明按钮和其他组件,希望减少我的代码行。 所以,我试过这种方式:
public class Main extends Activity {
EditText[] Items;
TextView[] Total;
String[] ids = {"editText1","editText2","textView8","textView7"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
for(int i=0;i<2;i++){
Items[i]=(EditText)findViewById(R.id.ids[i]);`
}
}
}
它不起作用,你明白我想做什么吗?有可能吗?
答案 0 :(得分:1)
R.id.Something
是自动生成的。
你不能通过使用字符串来引用它们......
如果将它们声明为int consts数组,则可以迭代:
int[] ids = new int[]{R.id.editText1,R.id.editText2,R.id.textView8,R.id.textView7};
然后
Items[i]=(EditText)findViewById(ids[i]);
答案 1 :(得分:0)
R.id.someting实际上是一个在项目中从R文件获得的int值,如常量值。你不能像字符串一样使用它。如果您是初学者,在项目中找到R文件有点棘手,但是当您找到它时,您会看到xml文件中的所有视图都具有通过R.id.name连接的int值。
答案 2 :(得分:0)
这是一个古老的问题,但是我感觉缺少一个答案。实际上,您可以通过使用
来完全按预期进行此操作Resources.getIdentifier(String name, String defType, String defPackage)
查看详细信息here。
在文档中不建议这样做,因为它效率低下,所以我不会养成习惯,但是您可能会发现特殊的情况,这是合理的。例如,我将其用于在我的应用的非生产版本中添加测试数据。
因此,在您的情况下,可能看起来像
Items[i]=findViewById(getResources().getIdentifier("editText" + i, "id", getPackageName()));