Android:查找动态创建 View 的ID

标签 android view find

我遇到了以下问题:

在 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/

相关文章:

android:如何将 View 引用传递给服务

linux - 如何列出所有 find -perm 结果?

Android:获取短信发送时间

android - 消息处理程序和 WeakReference 问题

macos - 在 Cocoa 中, View 和框架有什么区别?

c++ - 为自定义类重载 std::find

通过 exec 对 find 的输出进行 Bash 变量替换

java - 如何设置Layout的View

android - cursor.getType() 和 CursorIndexOutOfBoundsException 异常

view - templateUrl 和 styleUrls 的 Angular2 相对路径?