我有以下问题:
在 Android Studio 中,EditText当ExerciseButton单击an 时,我会动态生成 en :
public void exerciseButtonClick(View view) {
EditText exercise = new EditText(this);
exercise.setId(exerciseId);
exerciseId++;
}
Run Code Online (Sandbox Code Playgroud)
稍后在代码中,我想EditText通过 ID引用所有我的 。我正在尝试这样的事情,但这不起作用:
for (int i = 1; i < exerciseId; i++) {
EditText currentEditText = (EditText) findViewById(i);
// further instructions on that EditText
}
Run Code Online (Sandbox Code Playgroud)
错误当然在这里:findViewById(i),显示预期资源类型为 id。我怎么解决这个问题?
您需要确保ID不会与 Android 生成的 ID 发生冲突。此外,您需要确保将视图添加到活动视图层次结构中,否则将永远找不到它们。
在您的情况下,我可能会尝试以下操作之一
1)如果你仍然想使用整数id,那么使用这个方法来生成一个有效的非冲突id
https://developer.android.com/reference/android/view/View.html#generateViewId
2) 设置tag为视图,并通过 检索tag。标签可以是任何对象。
public void exerciseButtonClick(View view) {
EditText exercise = new EditText(this);
exercise.setTag("exercise-" + excersiceId);
excersiceId++;
}
EditText exercise = (EditText)findViewByTag("exercise-" + someId );
Run Code Online (Sandbox Code Playgroud)
3) 保留一个局部变量,保存对创建的 EditText(或创建的 EditText 数组)的引用
private EditText exercise;
public void exerciseButtonClick(View view) {
exercise = new EditText(this);
excersiceId++;
}
Run Code Online (Sandbox Code Playgroud)