java - 如何在 JAVA 中将 ID 添加到已编程的布局项 (android)

标签 java android xml layout

我正在用 Java 代码向布局添加多个元素。例如,在 imageview 之前使用一些 layoutparams 将 java 编码为已知的layout

layout.addView(imageview, layoutparams);

我假设我不能在 XML 中这样做,因为我不知道将添加多少元素(由用户确定)。

我需要为那些添加的元素设置并知道 ID,以便我以后可以引用它们

我需要的是(添加之前):

imageview.setId(??);

这个方法好用吗?如果是这样,我该如何使用它? 我主要担心的是我不确定 R.id 是如何工作的。 例如,我可以将这些 ID 设为 100001、100002、100003... 吗?我不会覆盖任何吗? 我会将这些 ID 存储在一个列表/数组中,以便稍后在代码中使用。

public static int generateViewId ()

Added in API level 17 Generate a value suitable for use in setId(int). This value will not collide with ID values generated at build time by aapt for R.id.

如果由于多个方法添加元素而在运行时发生冲突怎么办。有没有类似sql的事务? 顺便说一句:选择 API17 并不是我想要的。略高于 50% 的市场份额。

最佳答案

如果您需要获取对动态添加到一堆其他类似 View 的某个View 的引用,您可能需要使用类似于下面的循环:

for(int i = 0; i < parent.getChildCount(): i++) {

   View view = parent.getChildAt(i);

}

如果您需要比这更多的控制权,那么您可能需要查看 View.setTag()方法。使用它,您可以为每个 View 创建一个唯一的标签,并稍后在循环中检索它。

final ImageView imageView = (ImageView) findViewById(R.id.imageview);
imageView.setTag("I'm a tag!");

for(int i = 0; i < parent.getChildCount(): i++) {

   View view = parent.getChildAt(i);

   if(view != null && view.getTag() == "I'm a tag!") {

       // Do something with the View

   }

}

虽然上面的代码应该可以工作,但我可能会建议从不同的角度来解决这个问题,具体取决于您打算对 View 执行的操作。

关于java - 如何在 JAVA 中将 ID 添加到已编程的布局项 (android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28388220/

相关文章:

java - 在 SimpleDateFormat 模式字符串中使用字母字符

java - 如何等待一段时间,然后才返回默认值?

javascript - 将文本应用于图像(不推送它)

C# 与雅虎天气 api

python - lxml.etree 不能在 python 3 中使用 cdata

java - SAX 解析器问题

java - 是否可以在基于 IntelliJ Idea 平台的 IDE 的注释中引用文件?

java - 如何从 Firebase 检索多项数据并将这些字符串合并在一起?

android - 如何在 clang (Android-Studio) 中使用 -v 获取 undefined reference 错误的详细输出

java - Android Studio Gson 到内部存储