【问题标题】:how to generate unique ID's for layouts in android?如何为android中的布局生成唯一ID?
【发布时间】:2016-01-20 16:43:22
【问题描述】:

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

在应用程序中我需要引用一个动态创建的布局,因此我需要为其分配一个 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?

谢谢 詹姆

【问题讨论】:

标签: android android-layout


【解决方案1】:

如果您使用 API 17 或更高版本,Android API 会在 View 类中提供一个方法来为您执行此操作:

View.generateViewId();

根据API

生成一个适合在 setId(int) 中使用的值。此值不会与 aapt for R.id 在构建时生成的 ID 值冲突。

【讨论】:

    【解决方案2】:

    将视图对象的内存地址转换为int,并将其设置为视图的id。它在 Activity 的上下文中始终是唯一的。

    for (int i = 0; i < count; i++) {
            TdcItem item = items[i];
    
            int id = Integer.parseInt(""+item, 16);
            item.setId(id);
            ....
        }
    

    【讨论】:

    • 无法编译:找不到适合 parseInt(TdcItem, int) 的方法。方法 Integer.parseInt(String.int) 不适用
    • 代码只是上面提到的概念证明。你也可以自己解决这些未成年人的事情。无论如何尝试修改后的代码。
    猜你喜欢
    • 2014-11-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多