在共享首选项中保存 R ids
Saving R ids in Shared Prefs
我目前在 android 中使用共享首选项来保存我的一些设置。这很好用,但我遇到了 R 的一个小问题。
在我的共享首选项中,我还保存了一些图像资源 ID,以便稍后(在应用程序被销毁后)在新的应用程序启动时访问它们。
现在显然,一旦我将新资源添加到我的资源树并再次构建应用程序(也称为更新),ID 就会发生变化,并且我正在使用我之前保存的 ID 访问不同的资源。
你有idea/approach如何保存图像资源 ID(或任何其他标识符)而不丢失它们的 link 吗?
非常感谢您。
您可以将资源名称保存在共享首选项中并通过以下方式检索 Drawable:
Drawable drawable = getResources().getDrawable(getResources().getIdentifier(yourDrawableName, "drawable", getPackageName()));
R
值会经常变化,并不意味着稳定。
最好的解决方案是在 SharedPreferences
中保存在您的应用中具有实际业务意义的内容,然后将这些值映射到可绘制对象和您可能用于呈现该信息的其他项目。这样,如果您决定需要重构和重命名这些可绘制对象,就不会破坏数据存储。
如果你想偷懒或者愿意规定你永远不能更改可绘制对象的名称,你可以在 Resources
对象上使用类似 getResourceEntryName()
的东西(你可以得到其中之一这些通过 getResources()
,调用任何 Context
),以找到给定 ID 的资源的名称,并保留该名称。然后您可以在 Resources
对象上使用 getIdentifier()
稍后查找相应的 R.drawable
值。
我目前在 android 中使用共享首选项来保存我的一些设置。这很好用,但我遇到了 R 的一个小问题。 在我的共享首选项中,我还保存了一些图像资源 ID,以便稍后(在应用程序被销毁后)在新的应用程序启动时访问它们。 现在显然,一旦我将新资源添加到我的资源树并再次构建应用程序(也称为更新),ID 就会发生变化,并且我正在使用我之前保存的 ID 访问不同的资源。
你有idea/approach如何保存图像资源 ID(或任何其他标识符)而不丢失它们的 link 吗?
非常感谢您。
您可以将资源名称保存在共享首选项中并通过以下方式检索 Drawable:
Drawable drawable = getResources().getDrawable(getResources().getIdentifier(yourDrawableName, "drawable", getPackageName()));
R
值会经常变化,并不意味着稳定。
最好的解决方案是在 SharedPreferences
中保存在您的应用中具有实际业务意义的内容,然后将这些值映射到可绘制对象和您可能用于呈现该信息的其他项目。这样,如果您决定需要重构和重命名这些可绘制对象,就不会破坏数据存储。
如果你想偷懒或者愿意规定你永远不能更改可绘制对象的名称,你可以在 Resources
对象上使用类似 getResourceEntryName()
的东西(你可以得到其中之一这些通过 getResources()
,调用任何 Context
),以找到给定 ID 的资源的名称,并保留该名称。然后您可以在 Resources
对象上使用 getIdentifier()
稍后查找相应的 R.drawable
值。