有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我想使下面的代码简洁。它有类似呼叫的重复。我尝试了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) 个答案

  1. # 1 楼答案

    使用以下命令:

        //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;
    

    希望能有帮助

  2. # 2 楼答案

    使用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());