8

@+id我知道和之间的区别@id(请参阅这个接受的答案)。但是,当我在@+id.

如果必须创建或仅重用标识符,资源编译器是否有理由无法自行推断?底层哈希表结构可以完成这项工作:具有相同 id 的每个资源都进入同一个存储桶,如果密钥不存在,则创建它。

4

3 回答 3

1

Probably the compiler would not be able to differentiate between a 'right' and a 'wrong' id. If it finds a new id (i.e. one that is not in the underlying hashtable), it would always assume it to be a right, new id. It would not be able to differentiate between an actual new id and a mistyped id.

于 2013-10-23T13:22:32.003 回答
1

我可以想象它是为了帮助程序员。

如果您不需要 @+id 构造,那么所有 @id 引用/构造都是有效的,那么很难追踪错误,因为编译器不会因不正确的引用而失败(因为它只会构造错字 id )。

换句话说,所有 id 引用错误都必须在运行时发现。

编辑:

刚刚注意到 Piovezan 的类似回答,关于您的评论:

Maybe, but the result is that many devs use @+id everywhere, since there is no error if the id is already defined, and everything works just fine. That means the compiler tests if the id already exist, but not if it does not exist, that's crazy

然后那些开发人员滥用@+id 构造imo。

拥有区分@+id 和@id 的选项仍然要好得多,因为(对于那些不滥用@+id 的人)编译器有可能在错误引用时给出编译时错误。

编辑2

并解决评论:

That's the link I gave in the first sentence. It explains the difference but does not answer why the '+' cannot be automatically infered by AAPT

我相信它可以,它只是不是由于上面的论点(我相信)。

于 2013-10-23T13:58:08.850 回答
0

使用 @+id 您将 id 添加到 R.java 中,这允许您从 Java 类中引用它,而使用 @id 则不是。仅当已创建特定 id 并且您在另一个视图中引用它时,您才能使用 @id,例如android:layout_below="@id/some_id"

于 2013-10-23T13:16:59.360 回答