我的软件涉及大量更改图像。我不想重复查找资源编号,而是想创建一些常量来表示每个图像引用。以下是我到目前为止的尝试:
此尝试会在启动时产生一个力量。
private final int EMPTY = getResources().getIdentifier("dotted_circle", "resId", "en.deco.android.livehud");
@Override
public void onCreate(Bundle savedInstanceState)
{
.....
}
此尝试返回错误“最终变量可能未初始化”。删除final允许它工作。
private final int EMPTY
@Override
public void onCreate(Bundle savedInstanceState)
{
EMPTY = getResources().getIdentifier("dotted_circle", "resId", "en.deco.android.livehud");
}
首先在这里使用常量是一个好主意吗?
答案 0 :(得分:2)
首先在这里使用常量是一个好主意吗?
没有。从资源中读取值的例程更好:
public class ImageUtils {
private static int empty = -1;
public static int getEmpty(Context context) {
if(empty == -1)
empty = context.getResources().getIdentifier("dotted_circle", "resId", "en.deco.android.livehud");
return empty;
}
}
答案 1 :(得分:1)
将资源加载到常量中是不可能的。
我已经对这个主题进行了搜索,并在此处询问了question - 没办法。
看看它 - 它们已经是常数了。所以,如果有效性不是问题,你可以在网站上找到它们。或者将它们加载到变量中。很难过,不是吗?
答案 2 :(得分:1)
第一个不起作用,因为你试图在构造之前调用类的方法。第二个不起作用,因为您没有在构造时初始化最终变量。 (它需要在定义或构造函数中完成)。使你的getResource操作成为另一个类的静态方法(类似于ResourceUtilities.getResources()),这应该使它工作。
答案 3 :(得分:0)
创建Application类。请参见示例here. 然后像这样使用它:
private final int EMPTY = App.getContext().getResources().getIdentifier("dotted_circle", "resId", "en.deco.android.livehud");