2012-01-13 4 views
7

Теперь я знаю, что если мне нужно получить рекуррент в некоторой статической функции, я должен передать контекст или источники контекста там как-то - по параметру или через статическую переменную. Но почему это необходимо? Идентификаторами ресурсов являются, достижимые в статических условиях, например R.string.some_my_stuff. Если я хочу системный ресурс, он также отображается там через Resources.getSystem().getString(android.string.some_common_stuff). Но почему я не могу сделать что-то подобное, чтобы получить приложение ресурс? Файлы ресурсов являются обычной статической частью источников. Ресурсы: Статические и принадлежат к заявке. Классы приложений принадлежат ему таким же образом, и I может статически ставить свои статические части.Почему невозможно получить доступ к ресурсам статическим способом?

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

Боюсь, я не понимаю что-то очень важное.

Пожалуйста, не повторяйте, что я не могу этого сделать. Я знаю это, на мою честь. Пожалуйста, объясните, почему, или покажите мне путь ... Только это вылечит меня от моей печали :-) Спасибо.

+1

Ваши ресурсы принадлежат вашему приложению, что является контекстом. что вы можете сделать, это иметь класс приложения, который является одноэлементным и доступ к вашим ресурсам оттуда. также, как вам нужны ресурсы в месте, где вы не можете получить доступ к каким-либо контекстам? – njzk2

+1

Обратите внимание, что вы не можете получить те ресурсы, которые не загружаются с помощью действий/видов деятельности. – adatapost

+0

@njzk. 1. То, что я могу достичь, не означает, что я ДОЛЖЕН достичь этого. 2. В действии статических окончательных определений var вы не можете достичь контекста, но чтение глобальных констант из ресурсов было бы естественным сделать прямо здесь. – Gangnus

ответ

3

Идентификаторы ресурсов уникальны для каждого приложения, они не являются уникальными для всех приложений (включая систему Android). Например. может быть две разные строки в разных приложениях, которые имеют одинаковый идентификатор, скажем, 42. Следовательно, yon может получить доступ только к одному приложению статически (каждый программист должен согласиться с тем, что есть, его системой Android (нет выбора, его единственный всегда установлен)). Для всех других приложений вы должны быть в состоянии сообщить системе, какие ресурсы приложения вы хотите получить. Вы делаете это, используя контекст.

+0

+1. вторая часть вашего сообщения имеет интересную мысль. Но ИМХО, это не ответ. Контекст экземпляра активности имеет доступ к ресурсам приложения. Это правильно для каждого вида деятельности в приложении. Но их классы также относятся к приложению. Почему только экземпляры действий видят ресурсы, но не классы действий? Они ** не ** относятся к системе Android. – Gangnus

+0

Статическая информация в классе создается во время компиляции. Но вы не можете идентифицировать приложение во время компиляции, потому что вы не можете гарантировать уникальные идентификаторы в этот момент. Только экземпляр вашего приложения, представленный контекстом (сгенерированный при запуске приложения), дает уникальный идентификатор, созданный в это время системой Android. Чтобы предоставить вам статический доступ, пусковой аппарат должен был изменить код. – Stefan

+0

В приведенном выше комментарии замените «время компиляции» на «время загрузки класса». Это означает, что загрузчик классов мог бы вводить информацию. Однако это не так. – Stefan

Смежные вопросы