如何在for循环中定义和设置TextView以简化代码?

时间:2016-09-01 16:42:20

标签: java android findviewbyid

我想让下面的代码简洁明了。它重复了类似的呼叫。我尝试过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);

2 个答案:

答案 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());