如何为android中的布局生成唯一ID?

时间:2015-10-21 15:36:05

标签: android android-layout

我有一个应用程序,可以根据来自数据库的信息以编程方式创建控件。

在应用程序中,我需要引用一个动态创建的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?

由于 海梅

2 个答案:

答案 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值冲突