如何将此int初始化为常量?

时间:2012-02-03 21:16:51

标签: java android constants imagebutton final

我的软件涉及大量更改图像。我不想重复查找资源编号,而是想创建一些常量来表示每个图像引用。以下是我到目前为止的尝试:

此尝试会在启动时产生一个力量。

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");
        }

首先在这里使用常量是一个好主意吗?

4 个答案:

答案 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");