我正在开发一个具有固定和动态布局部分的Activity。动态部分(以及创建的小部件的数量和类型)以这种方式基于数据库值: 对于每个数据库行,我将有一组小部件。并且每个组的组件取决于该数据库行的对象类型(从其中一个列确定)。
为了保存/恢复实例状态,所有小部件都需要具有ID。我想确保我自己的ID永远不会与生成的R类中的ID冲突。
为了在app中更好地处理(找到哪个小部件映射到哪个数据对象的字段),ID = row * 100 + fieldindex等编号方案会有所帮助。 Fieldindex并不是一个列号。每个对象类型都应该有自己的fieldindices。
由于生成的R中的ID值似乎没有连续的数字,我不能只预定义R中的ID池并使用它们而不需要额外的映射。 针对预定义池的第二个原因:大量的fieldindices会导致大型ID池。第三,ID池的大小将限制可以显示的行数。
我可以将自己的布局组件的ID用于安全号码范围吗? 看一下gen /文件夹中的R.java,我觉得生成的ID都大于0x7f000000。这有保证吗? 如果是,是否可以使用0x00000000到0x7f000000的范围,还是保留用于内部用途?
答案 0 :(得分:2)
为什么要避免使用相同的ID?只有必要的是:
An ID need not be unique throughout the entire tree, but it should be unique within the part of the tree you are searching
。所以,你可以使用你的公式
ID = row * 100 + fieldindex
即使它在项目中不是唯一的,我也能正常工作。