Как я могу инициализировать этот int как константу? - PullRequest
1 голос
/ 04 февраля 2012

Мое программное обеспечение включает в себя много изменений изображений. Вместо того, чтобы искать номер ресурса несколько раз, я хотел бы создать некоторые константы для представления каждой ссылки на изображение. Вот мои попытки до сих пор:

Эта попытка создает силу закрытия при запуске.

private final int EMPTY = getResources().getIdentifier("dotted_circle", "resId", "en.deco.android.livehud");

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        .....
    }

Эта попытка возвращает ошибку «окончательные переменные не могут быть инициализированы». Удаление финала позволяет ему работать.

private final int EMPTY

        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            EMPTY = getResources().getIdentifier("dotted_circle", "resId", "en.deco.android.livehud");
        }

Является ли использование констант здесь хорошей идеей?

Ответы [ 4 ]

2 голосов
/ 04 февраля 2012

Является ли использование констант здесь хорошей идеей?

Нет.Лучше подпрограмма, которая читает значение из ресурсов:

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 голос
/ 04 февраля 2012

Первый не работает, потому что вы пытаетесь вызвать методы вашего класса до его создания.Второе не работает, потому что вы не инициализируете свою окончательную переменную при построении.(Это нужно сделать в определении или в конструкторе).Сделайте вашу операцию getResource статическим методом другого класса (что-то вроде ResourceUtilities.getResources ()), и это должно заставить его работать.

1 голос
/ 04 февраля 2012

Невозможно загрузить ресурсы в константы.

Я уже выполнил поиск по теме и задал вопрос здесь по этому вопросу - Нет.

Посмотрите на это так - они уже постоянные. Итак, вы могли бы их на сайте, если эффективность не является проблемой. Или загрузите их в переменные. Это печально, не правда ли?

0 голосов
/ 04 февраля 2012

Создать класс приложения.Смотрите пример здесь. Затем используйте его так:

private final int EMPTY = App.getContext().getResources().getIdentifier("dotted_circle", "resId", "en.deco.android.livehud");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...