android - 如何避免持久化资源整数的不良做法(R.drawable.resource)
问题描述
拥有一个引用 String 和 drawable 的资源值的类,我需要保留该类并在将来加载它。我坚持使用 GSON 和共享偏好。
问题是我总是对我的应用程序的资源进行更改,持久值的 resourceID 不再有效,因为应用程序中所有资源的资源 ID 都发生了变化。
我怎样才能避免这个问题?我需要坚持那堂课..
这是我坚持的类的代码的最小示例:
public class SpaceshipUpdate {
private int nameResource;
private int imageResource;
public SpaceshipUpdate(int nameResource, int imageResource){
this.nameResource = nameResource;
this.imageResource = imageResource;
}
}
以及我如何创建该类的新实例:
SpaceshipUpdate u1 = new SpaceshipUpdate(R.string.laser1_title, R.drawable.shop_proton_laser);
解决方案
您可以将资源的名称(例如:“laser1_title”)保留为字符串而不是R.string.laser1_title
版本,并使用此帮助函数(或类似的东西)动态获取该资源。
它可能没有那么快,但是如果您没有很多资源,您应该不会注意到任何性能问题。
public static int has_resource_id(Context context,String name,String resource_type)
{
final int resourceId = context.getResources().getIdentifier(name, resource_type,
context.getApplicationContext().getPackageName());
return resourceId;
}
推荐阅读
- graphql - GraphQL 查询中的数据规范化
- java - Java 中 docx4j 中的 SpreadsheetMLPackage.load 返回一个 OOXML 文件,而不是 XLSX 文件
- r - 是否有用于替换(或完全删除)解释线性模型(lm)中的变量的函数?
- spring-boot - 验证不适用于 RestController 中的 Map 键
- vba - VBA 新手:MSXML2.XMLhttp 从 POST 响应中去除会话 cookie
- python - 安装了 Python、Anaconda 和 Juypter 但无法正常工作
- javascript - 如何从 HTML 中获取选定的值并在 js 或 php 中处理它?
- r - 如果另一列中的字符是 R 中的 x,则在一列中赋值
- c++ - 当我的四边形在 OpenGl 中绘制时,纹理奇怪地拉伸,我需要它均匀地变形为四边形的形状,而不是如下所示。我该怎么做?
- css - Material-UI 中的 TextField 进入页眉区域