我有一个应用程序,可以根据来自数据库的信息以编程方式创建控件。
在应用程序中,我需要引用一个动态创建的Layout,这样我就需要为它分配一个ID。
目前,我有:
final Random random = new Random();
for (int i = 0; i < count; i++) {
TdcItem item = items[i];
int id = item.getID();
final int layoutId = random.nextInt(id * (id + 1));
....
}
其中id变量是来自数据库的ID,当然在数据库表中是唯一的。
问题是我也在创建来自另一个表的按钮,因此,从表的角度来看,ID是唯一的,但是,其中一些在活动上下文中并不是唯一的。
这导致当我使用findViewById尝试查找布局时,会找到一个按钮,抛出一个无效的强制转换异常。
有没有办法为布局创建唯一的ID?
由于 海梅
答案 0 :(得分:1)
将View对象的内存地址转换为int
,并将其设置为视图的ID。它在活动的上下文中始终是唯一的。
for (int i = 0; i < count; i++) {
TdcItem item = items[i];
int id = Integer.parseInt(""+item, 16);
item.setId(id);
....
}
答案 1 :(得分:1)
Android API在View类中提供了一种方法,如果您使用的是API 17或更高版本,则会为您执行此操作:
View.generateViewId();
根据API:
生成适合在setId(int)中使用的值。该值不会与构建时由aapt为R.id。
生成的ID值冲突