Статический доступ к ресурсам приложения Android?

У меня есть проблема в отношении. ресурсы приложения Android:

В моем приложении есть разное. режимы (edit / plan / exec), которые я хотел бы описать, используя тип перечисления. Я буду, однако, я хотел бы заполнить значения перечисления строками, которые происходят из файла ресурса string.xml, т.е. вместо

enum Mode {
    EDIT ("edit"), 
    PLAN ("plan"), 
    EXEC ("exec");

    String name;
    Mode(String name) { this.name = name; }
    @Override
        public String toString() { return this.name; }
};

я хотел бы написать что-то вроде:

enum Mode {
    EDIT (getResources().getText(R.string.mode_edit).toString()),
    PLAN (getResources().getText(R.string.mode_plan).toString())),
    EXEC (getResources().getText(R.string.mode_exec).toString()));

    String name;
    Mode(String name) { this.name = name; }
    @Override
        public String toString() { return this.name; }
}

, которое, например, позволило бы изменять имена режимов, используя файл ресурсов и, таким образом, позволяют последующие изменения имени без изменений кода, интернационализации и т. д.

Проблема в том, что стандартный доступ к ресурсам осуществляется через метод getResources () Activity, который доступен только в конструкторе (и во время выполнения). методы экземпляра). Однако объявление перечисления является частью статического кода инициализации класса. Есть ли способ получить статический доступ к ресурсам приложения?

Майкл

8
задан mmo 24 August 2010 в 19:55
поделиться

2 ответа

Спасибо, radek-k, за примеры! Тем временем я сам придумал несколько похожую идею, а именно я добавил статический метод в перечисление, которому я затем передаю дескриптор ресурса во время метода Activity onCreate(). Это позволяет методу toString() получить доступ к строкам ресурсов. ИМХО не очень элегантно, но работает...

Cheers, Майкл

0
ответ дан 5 December 2019 в 12:53
поделиться
enum Mode {
    EDIT (R.string.mode_edit),
    PLAN (R.string.mode_plan),
    EXEC (R.string.mode_exec);

    String id;
    Mode(String id) { this.id = id; }

    public String getName(Resources r){ return r.getText(id); }

    @Override
    public String toString() { return this.name; }
}

В качестве альтернативы вы можете сделать следующее:

public class ClassName {
    public static Resources res;
}

В вашем Application.onCreate () или Activity.onCreate():

ClassName.res = getResources();

и в вашем режиме перечисления:

    @Override
    public String toString() { 
        Resources res = ClassName.res;
        if (res==null){ return super.toString(); }
        else { return res.getText(id); }
    }
13
ответ дан 5 December 2019 в 12:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: