Android:资源修改后可绘制的id变化

我有一个Android应用程序,使用图组件来select一个图标,并将其分配给一个button。
图标集位于res/drawable文件夹中,可以通过指南的典型适配器在库中进行访问:

 private Integer[] Imgid = { R.drawable.icon_home, R.drawable.icon_home2, ... } 

select一个图标后,我将设置存储在带有button和绘图的ID的数据库中。
所有的工作都完成了,但我注意到,如果我想要添加或修改我的应用程序中的图标集或资源,那么旧资源的id可能会改变,所以db中的首选项指的是错误的图标。
有没有办法强制R类的旧ID,所以他们在未来没有改变? 或者是有另一种方法来pipe理与另一个属性不是ID的组件厨房的项目? (也许string名称和reflection?)

提前致谢

Solutions Collecting From Web of "Android:资源修改后可绘制的id变化"

如果你不打算改变,你可以将drawable的名字存储在数据库中。 getResourceEntryName从资源ID返回名称:

 Resources resources = getResources(); String name = resources.getResourceEntryName(R.drawable.icon); 

你可以用getIdentifier从名字中得到资源ID:

 int resId = resources.getIdentifier(name, "drawable", "your.package.name"); 

你不能使用静态的资源标识符,但是你应该看看Resources类的两个方法:

则getIdentifier()

getresourceName()

您不应该依赖于R.drawable.*属性的实际值。
改为创build自己的ID(例如1对应于R.drawable.icon_home ,2对应于R.drawable.icon_home2

编辑:
string名称和reflection也应该工作,但它可能有点矫枉过正,你只有几个图标。