首页 > 解决方案 > 如何避免持久化资源整数的不良做法(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);

标签: androidpersistenceandroid-resources

解决方案


您可以将资源的名称(例如:“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;
}

推荐阅读