如何在 Android 中以编程方式在 EditText 中设置 ID

Rub*_*uby 2 android android-edittext

我在 GridLayout 上有一个名为 addnewTask 的按钮。创建此按钮时,它将创建一个 EditText。

private GridLayout gridLayout;

int rowIndex = 3;
int colIndex = 1;

int i=0;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_set_task);

    gridLayout = (GridLayout) findViewById(R.id.taskLayout);

}
Run Code Online (Sandbox Code Playgroud)

此函数在单击按钮时创建 EditText -->

public void addView(View view) {
    i++;
    String tname = "task" + Integer.toString(i);
    EditText editText = new EditText(this);
    GridLayout.LayoutParams param = new GridLayout.LayoutParams();
    param.height = ViewGroup.LayoutParams.WRAP_CONTENT;
    param.width = GridLayout.LayoutParams.MATCH_PARENT;
    param.rowSpec = GridLayout.spec(rowIndex);
    param.columnSpec = GridLayout.spec(colIndex);
    editText.setLayoutParams(param);
    if (rowIndex > 3) {
        editText.setTag(tname);
    }

    gridLayout.addView(editText);
    rowIndex++;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我想设置我创建的 EditText 的 android:id。

像这样:单击按钮时,将在第 3 行第 1 列和 ID 名称 task1 中创建 EditText。

再次单击该按钮时,将创建另一个 EditText,位于第 4 行第 1 列和 ID 名称为 task2。

再次单击按钮时,会在第 5 行第 1 列中创建另一个 EditText,id 名称为 task3。

等等.....

was*_*syl 5

android 中的 ID 不是字符串——它们总是数字。即使您用 xml 编写,@+id/textId也会为该文本生成一个数字。你可以在你的R文件中看到。

您可以做的是使用editText.setId(int)方法将 id 分配给您的编辑文本。如果您希望能够轻松参考编辑文本,您可以:

  1. 按顺序分配 id:1,然后是 2、3 等。然后项目的 id 将是(row-1) * <columnsCount> + column)(因此,如果您有 3 列,则第五行中的第二个项目的 id 为 4 * 3 + 2)

  2. 创建一个类型为的 map 字段Map<String, Integer>,并再次按顺序分配 id,并将它们保存在。

String tname = "task" + Integer.toString(i);   
EditText editText = new EditText(this);
editText.setId(i);
idsMap.put(tname, i);
Run Code Online (Sandbox Code Playgroud)

然后你通过调用获取edittext的id idsMap.get("task3")

第三种选择是EditText在地图中保留对您的引用:然后您将拥有一张Map<String, EditText>地图,然后调用

String tname = "task" + Integer.toString(i);   
EditText editText = new EditText(this);
editTextsMap.put(tname, editText);
Run Code Online (Sandbox Code Playgroud)