Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a sensible way to refer to application resources (R.string...) in static initializers

Tags:

android

Is there a sensible, clean way to refer to application resources from static initalizer code in my android classes.

I would specifically like to define an enum which contains the values of some resource strings in its constants.

Here is some pseudo code for the enum

private enum MyEnum {
    Const1(getString(R.string.string1)),
    Const2(getString(R.string.string2)),
    Const3(getString(R.string.string3));

    private String strVal;

    MyEnum(String strVal){
        this.strVal = strVal;
    }
}

This question applies to any kind of static initialization.

like image 845
fleetway76 Avatar asked Jun 14 '11 21:06

fleetway76


1 Answers

I don't think there is a direct way as context is required to load resources. However, what you could do is to provide a method in your enum to get required string once context is available. Something like

private enum MyEnum {
    Const1(R.string.string1),
    Const2(R.string.string2),
    Const3(R.string.string3);

    private int resId;

    MyEnum(int resId){
        this.resId = resId;
    }

    public String resource(Context ctx) {
       return ctx.getString(resId);
    }
}

So you access it like

String val = Const3.resource(context);
like image 170
Alex Gitelman Avatar answered Nov 12 '22 02:11

Alex Gitelman