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

时间:2018-04-02 15:19:32

标签: java android android-layout android-checkbox

我通过使用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,它始终是最后一个已设置的。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

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

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

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