我有一个布局与100个空白EditTexts,都根据自己的行/列的ID命名(如box0101,box0102等)。
然后我有100个TextViews另一个布局完全相同的布局与每一个字母,使用相同的命名惯例(answerbox0101,answerbox0102等)
我想写一个循环,检查box0101对answerbox0101,依此类推,直到箱中的任何一个不匹配,或者它获取到100,所有的箱子比赛。
我很好的写循环的逻辑,我的问题是,我需要的循环参数是EditText上的名称的一部分! 我该如何克服这个问题?
for(int i=0;i<ROW_COUNT;i++){
for(j=0;j<COLUMN_COUNT;j++){
int editTextId=getResId("box"+i+j,this,id.class);
int textViewId=getResId("answerbox"+i+j,this,id.class);
EditText et=(EditText)findViewById(editTextId);
TextView tv=(TextView)findViewById(textViewId);
//Then do your comparison as you like and do the rest.
}
}
public static int getResId(String variableName, Context context, Class<?> c) {
try {
Field idField = c.getDeclaredField(variableName);
return idField.getInt(idField);
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
您可以使用View的标签属性设置String属性,就像如果你正在创建100个editTexts,您可以设置编辑文本标记,如editText0101,editText0102,...在回答editTexts answerbox0101,answerbox0102相同....本方法,你可以通过标签名获得EDITTEXT的直接引用,通过findViewByTag()
方法。