将 Id 设置为动态创建的 edittext

Set Id to dynamically created edittext

我在单击按钮时动态创建 Edittext,并将此 edittext 保存到 Edittext 类型的 ArrayList,然后在 String 类型的 ArrayList 中获取所有 edittext 的值。在创建新的 Edittext 时,我还创建了一个带有交叉图像的 BUTTON,当用户单击它时,它会删除该 edittext。然后我将这些编辑文本传递给 CheckBox 选项问题,这也是我动态创建的。 问题是当我创建多个 edittext 并随机删除某人并单击 ok arraylist 删除它的最后一个索引时。我还将 ids 设置为 Edittext 但无法理解如何获取我要删除其值的相同 Edittext 的 Id 然后也将他从 ArrayList 中移除。

这里我正在创建 Edittext 并将它们添加到 "moreOptList" 中并带有 ID。

EditText checkBoxMoreEdt = new EditText(this);
 checkBoxMoreEdt.setId(i);
 moreOptList.add(i, checkBoxMoreEdt);

这里我要删除 Button clickListener 上的视图,但不是从 arrayList 中删除确切的值,如果我输入了 4 个选项,它也只会从 list.For 示例中删除视图和数组的最后一个索引 一种 b C d 然后删除选项 2,即 b,然后单击确定,它将显示给我 一种 b C 它所做的是现在从 arrayList 中删除最后一个保存值我应该如何获取我想要删除的确切编辑文本的 ID 并将其也从 arrayList 中删除。

final Button button = new Button(this);  
  button.setId(b);
  button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                chkbParentLayout.removeView(ll);
                moreOptList.remove(i);
            }
        });

问题很可能出在 ArrayList。当您按索引删除元素时,所有元素都会移动,因此索引与您的视图不匹配:

list.add(0, 0) //[0]
list.add(1, 1) //[0, 1]
list.remove(0) //[1]
list.remove(1) //throws IndexOutOfBoundsException

一个选项是将 ArrayList 替换为 HashMap:

map = HashMap<Integer, View>()
map.put(i, view)
...
group.remove(map.remove(i))

另一个有用的东西是使用setTag/getTag方法View,你可以在那里存储你的索引,所以你可能不需要有外部索引存储:

view.setTag(index)
index = view.getTag()