如何在for循环中定义和设置TextView,使代码简洁?
How to define and set TextView in a for loop to concise the code?
我想让下面的代码简洁。它重复类似的呼叫。我尝试了 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);
使用这个:
//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 个字段。
此外,如果您想稍微清理一下代码,可以创建一个 class,在其中粘贴数组创建部分并将变量设为静态。例如,如果您调用 class EditTextArrayHandler,您将得到这样的数组:
int[] editextIDs = EditTextArrayHandler.editTextIDs;
希望对您有所帮助。
使用 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());
我想让下面的代码简洁。它重复类似的呼叫。我尝试了 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);
使用这个:
//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 个字段。
此外,如果您想稍微清理一下代码,可以创建一个 class,在其中粘贴数组创建部分并将变量设为静态。例如,如果您调用 class EditTextArrayHandler,您将得到这样的数组:
int[] editextIDs = EditTextArrayHandler.editTextIDs;
希望对您有所帮助。
使用 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());