簡體   English   中英

如何在 Android 中以編程方式在 EditText 中設置 ID

[英]How to Set Id in EditText programmatically in Android

我在 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。

再次單擊該按鈕時,將創建另一個 EditText,位於第 4 行第 1 列和 ID 名稱為 task2。

再次單擊按鈕時,會在第 5 行第 1 列中創建另一個 EditText,id 名稱為 task3。

等等.....

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>類型的map字段,然后再按順序分配id,並將其保存。

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

您可以將這些編輯文本的引用保存在表示網格單元格的數組中。 像這樣聲明arraylist:

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

並在addView方法的末尾繼續引用數組列表中的EditText,如下所示:

etArray.add(i,edittext);

現在像這樣引用這些視圖:

etArray.get(i);

通過這種方式,您可以引用它們來訪問文本。

動態分配ID可能會導致問題,因為id是一個整數,並且您分配的ID可能會導致與系統分配的ID沖突到其他組件。

您不能將 id 設置為字符串。 您只能將整數指定為 Id。 但是如果你想使用 String 作為 id 以方便使用,那么 - 在 res/values/ids.xml 文件中

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

然后將其用作:

edText.setId(R.id.edit_text_hello); 所以你可以做你需要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM