如何在Android

时间:2015-09-26 18:15:07

标签: 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);

}

此功能可在单击按钮时创建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++;
}

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

是这样的:单击按钮时,会在第3行,第1列和id名称task1中创建EditText。

再次单击该按钮时,将在第4行,第1列和id名称task2中创建另一个EditText。

再次单击该按钮时,将在第5行,第1列和id name task3中创建另一个EditText。

ANS SO ON .....

3 个答案:

答案 0 :(得分:3)

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<String, Integer>类型的地图字段,然后再按顺序分配ID,并将其保存。

  3. String tname = "task" + Integer.toString(i);   
    EditText editText = new EditText(this);
    editText.setId(i);
    idsMap.put(tname, i);
    

    然后通过调用idsMap.get("task3")

    获取edittext的id

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

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

答案 1 :(得分:0)

您可以将这些编辑文本的引用保存在表示网格单元格的数组中。 像这样声明arraylist:

ArrayList<EditText> etArray = new ArrayList<>();

并在addView方法的末尾继续引用数组列表中的EditText,如下所示:

etArray.add(i,edittext);

现在像这样引用这些观点:

etArray.get(i);

通过这种方式,您可以引用它们来访问文本。

动态分配ID可能会导致问题,因为id是一个整数,并且您指定的ID可能会导致与系统分配的ID冲突到其他组件。

答案 2 :(得分:0)

您不能将id设置为字符串。您只能将整数指定为ID。但是,如果您想使用String作为id以便于使用,则-在res / values / ids.xml文件中

<item name="edit_text_hello" type="id"/>

然后将其用作:

edText.setId(R.id.edit_text_hello); 这样您就可以做您需要的事情。