我遇到了以下问题:
在 Android Studio 中,我在单击 ExerciseButton
时动态生成 en EditText
:
public void exerciseButtonClick(View view) {
EditText exercise = new EditText(this);
exercise.setId(exerciseId);
exerciseId++;
}
在代码的后面,我想通过 ID 引用我所有的 EditText
。我正在尝试这样的事情,但这不起作用:
for (int i = 1; i < exerciseId; i++) {
EditText currentEditText = (EditText) findViewById(i);
// further instructions on that EditText
}
错误当然在这里:findViewById(i)
,显示Expected resource type to be on of id。我该如何解决这个问题?
最佳答案
您需要确保 ID
不会与 Android 生成的 ID 冲突。此外,您需要确保将 View 添加到 Activity View 层次结构中,否则将永远找不到它们。
在您的场景中,我可能会尝试以下操作之一
1) 如果您仍想使用整数 ID,则使用此方法生成有效的非冲突 ID
https://developer.android.com/reference/android/view/View.html#generateViewId
2) 给view设置tag
,通过tag
获取。标签可以是任何对象。
public void exerciseButtonClick(View view) {
EditText exercise = new EditText(this);
exercise.setTag("exercise-" + excersiceId);
excersiceId++;
}
EditText exercise = (EditText)findViewByTag("exercise-" + someId );
3) 保留一个局部变量,保存对创建的 EditText(或创建的 EditText 数组)的引用
private EditText exercise;
public void exerciseButtonClick(View view) {
exercise = new EditText(this);
excersiceId++;
}
关于Android:查找动态创建 View 的ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43366401/