我正在用 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/