为每个循环动态创建的视图设置 ID - android

Set Id for views dynamically created by a for each loop - android

我通过使用 for..each 循环遍历 ArrayList 动态地向 TableLayout 添加未知数量的视图。

当我尝试为每个视图设置唯一 ID 时,每个视图最终都具有相同的 ID。

    TableLayout Table = findViewById(R.id.table);    
    idCounter = 0;

    for (String string: array) {
        TableRow row = new TableRow(this);

        // adds id to table
        TextView serialText = new TextView(this);
        serialText.setText(string);
        row.addView(serialText);
        serialText.setId(idCounter);
        idCounter ++;

        // first checkbox
        CheckBox firstCheckbox= new CheckBox(this);
        row.addView(firstcheckbox);
        firstcheckbox.setId(idCounter);
        idCounter ++;

        firstCheckBox.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                onCheckBoxClick(idCounter);
            }
        });

        // second checkbox
        CheckBox secondCheckbox= new CheckBox(this);
        row.addView(secondCheckbox);
        secondCheckbox.setId(idCounter);
        idCounter ++; 

        secondCheckBox.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                onCheckBoxClick(idCounter);
            }
        });

        // third checkbox
        CheckBox thirdCheckbox= new CheckBox(this);
        row.addView(thirdCheckbox);
        thirdCheckbox.setId(idCounter);
        idCounter ++;

        thirdCheckBox.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                onCheckBoxClick(idCounter);
            }
        });

        // add row to table
        Table.addView(row, new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT));
    }

我需要每个视图都有一个唯一的 ID,这样我就可以在使用 OnClickListener 时区分视图。

public void onCheckBoxClick(Integer id) {

    Log.d("ID", id);
}

每个复选框都有相同的 ID,它总是最后设置的。

首先 View.generateViewId()(API 级别 > 17)将为您的视图创建一个唯一 ID。

然后使用setId()设置生成的id。

Other solution,您可以在 class 扩展应用程序 class 中创建 1 个静态变量,并增加它。

示例:在 YourApplication 中扩展应用程序:

public class YourApplication extends Application {
    public static int newId = 1;
}

当需要新的id时,只需增加newId即可。