我想让下面的代码简洁明了。它重复了类似的呼叫。我尝试过LinearView和GetChildCount方法,但它没有给我正确的结果,我可能误解了如何使用Childs或其他方法在循环中定义这些。
任何人都可以帮忙吗?
tv1 = (EditText) findViewById(R.id.tv1);
tv2 = (EditText) findViewById(R.id.tv2);
tv3 = (EditText) findViewById(R.id.tv3);
// ...
// ... and so on till
// ...
tv25 = (EditText) findViewById(R.id.tv25);
// Similarly
tv1.setText(stall);
// ... till ...
tv25.setText(stall);
答案 0 :(得分:0)
使用此:
//create an array of ids
int[] editextIDs = {R.id.tv1
,R.id.tv2
,R.id.tv3
,R.id.tv4
,R.id.tv5
,R.id.tv6
,R.id.tv7
,R.id.tv8
,R.id.tv9
,R.id.tv10
,R.id.tv11
,R.id.tv12
,R.id.tv13
,R.id.tv14
,R.id.tv15
,R.id.tv16
,R.id.tv17
,R.id.tv18
,R.id.tv19
,R.id.tv20
,R.id.tv21
,R.id.tv22
,R.id.tv23
,R.id.tv24
,R.id.tv25
};
//create an arraylist of 25 editTexts
ArrayList<EditText> editTexts = new ArrayList<>();
//fill the array
for(int i = 0; i < 25 ;i++)
{
editTexts.add(i,(EditText) findViewById(editextIDs[i]));
}
//set the texts
for(int i = 25; i <25 ;i++)
{
editTexts.get(i).setText(stall);
}
这可能看起来很多剪切和粘贴,但我用excel创建了R.id.tvX。为此,请编写
,R.id.tv1
然后拖动它直到你有25个字段。
另外,如果要稍微清理代码,可以创建一个类,在其中粘贴数组创建部分并使变量成为静态。例如,如果您调用类EditTextArrayHandler,您将得到如下数组:
int[] editextIDs = EditTextArrayHandler.editTextIDs;
希望它有所帮助。
答案 1 :(得分:0)
使用Java反射可以大大减少代码
EditText[] tv_ar = new EditText[25];
for (int i = 0; i < et_ar.length; i++) {
int cur_tv_index = R.id.class.getField("tv" + Integer.toString(i+1)).getInt(null);
tv_ar[i] = (EditText) findViewById(cur_tv_index);
}
可以使用
int cur_tv_index=context.getResources().getIdentifier("tv" + Integer.toString(i+1), "id", context.getPackageName());