Android:查找动态创建的视图的 ID

Mac*_*osz 4 android view find

我有以下问题:

在 Android Studio 中,EditTextExerciseButton单击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。我怎么解决这个问题?

Rob*_*ill 5

您需要确保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)