我正在研究Eclipse ADT。我遇到了需要检查一些EditText字段的任务,因此我决定使用FOR循环以较少的编码检查所有字段。
例如我有:
EditText editTxt1 = (EditText) findViewById(R.id.editText1);
EditText editTxt2 = (EditText) findViewById(R.id.editText2);
EditText editTxt3 = (EditText) findViewById(R.id.editText3);
EditText editTxt4 = (EditText) findViewById(R.id.editText4);
...
我想用for循环检查它们:
int x;
for (x=3; x<=4; x++) {
if (editTxt"x".getText().toString().equals("something")) do smthng...
}
是否有可能,或者我必须经历漫长的编码?
答案 0 :(得分:1)
你可以通过Quoi指出的反射做到这一点,但这通常不是一个好主意。
最好将对象添加到列表或地图中:
List<EditText> list = new ArrayList<EditText>();
EditText editTxt1 = (EditText) findViewById(R.id.editText1);
list.add(editTxt1);
EditText editTxt2 = (EditText) findViewById(R.id.editText2);
list.add(editTxt2);
EditText editTxt3 = (EditText) findViewById(R.id.editText3);
list.add(editTxt1);
EditText editTxt4 = (EditText) findViewById(R.id.editText4);
现在我们可以在列表中循环并使用索引来检查正在调用的编辑文本。
int i = 0;
for (EditText e : list) {
if(e.getText().toString().equals("something")) {
System.out.println("editText" + i + " equals something");
// do stuff
}
i++;
}
您也可以使用Map来执行此操作,这将允许您对对象具有名称值,以帮助您更好地参考以检查正在调用的对象。这需要更多的工作,但可能会使用
Map<EditText, String> map = new HashMap<EditText, String>();
EditText editTxt1 = (EditText) findViewById(R.id.editText1);
map.put(editTxt1, "editTxt1");
EditText editTxt2 = (EditText) findViewById(R.id.editText2);
list.add(editTxt2, "editTxt2");
for (Entry<String, String> e : map.entrySet()) {
if(e.getValue().equals("something")) {
System.out.println(e.getKey() + " was equal to somethihng");
}
}
PS - Never use ==
to compare Strings, it won't always work!!
答案 1 :(得分:1)
您必须使用函数getIdentifier();类似的东西:
int id = getResources().getIdentifier("editText" + x, "id", this.getPackageName());
EditText editTxt = (EditText) findViewById(id);
if (editTxt.getText().toString().equals("something")) do smthng...
此外,使用editTxt
而非editText
之类的内容并不是一个好主意:对于只保存一个字符,您在代码中添加了许多可能的混淆。
答案 2 :(得分:0)
我受到Anton的Kovalenko评论的启发,寻找他建议的解决方案。 在我看来,这种方式更清晰,编码更少。
我将其分享给此处列出的其他解决方案。
EditText[] editTextArr;
editTextArr = new EditText[4];
editTextArr[0] = (EditText) findViewById(R.id.editText1);
editTextArr[1] = (EditText) findViewById(R.id.editText2);
editTextArr[2] = (EditText) findViewById(R.id.editText3);
editTextArr[3] = (EditText) findViewById(R.id.editText4);
现在我们可以检查带有FOR循环的edittext字段,如下所示:
int i;
for (i=0; i<12; i++) {
if (editTextArr[i].getText().toString().equals("something")) do smthng....
}