Реализация getResources () Android

Я только начал изучать программирование Android, и у меня возникло сомнение в методе getResources (). Я заметил, что когда я создаю объект Resources, все, что мне нужно сделать, это:

Resources res = getResources();

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

Resources res = new Resources();

Второе сомнение заключается в следующем: в верхней части моего файла я импортировал класс Resources.

import android.content.res.Resources;

Теперь я читаю API Android, и он говорит, что getResources () является публичным абстрактным методом, если он абстрактный, какой класс его реализует? Как я могу просто назвать это набрав getResources (), если он не объявлен как статический?

Ответы на вопрос(2)

Решение Вопроса

Ваша деятельность расширяет классandroid.app.Activity что в свою очередь расширяет классandroid.content.Context (три уровня выше иерархии классов). Учебный классContext объявляет абстрактный методGetResources () Это означает, что ваш подкласс деятельности наследует этот метод, и вы можете вызвать его изнутри вашегоonCreate() метод (например).

МетодgetResources() объявлен как абстрактный в классеContext но один из промежуточных классов в иерархии классов (android.view.ContextThemeWrapper) обеспечивает реализацию метода.

Также это означает, что созданиеResources объект не ваша ответственность; вместо этого это делается структурой.

 devconsole29 мая 2014 г., 23:44
@janzoner Дело в том,ContextThemeWrapper обеспечивает реализациюgetResources() которыйActivity наследует. Это отвечает на оригинальный вопрос. И что'не так с моим ответом?
 devconsole29 мая 2014 г., 23:49
@janzoner И да, это вызываетsuper.getResources() который вызывает ContextWrapper 'реализация, которая в свою очередь вызываетmBase.getResources(), Я думаю, это в конечном итоге приводит к классуContextImpl но это не публичный класс. Это деталь реализации SDK. УвидетьИсходный код на GitHub.
 janzoner29 мая 2014 г., 15:55
Смотрите также мой вопросВот если вы заинтересованы, пожалуйста.
 janzoner30 мая 2014 г., 00:26
Извините, ваш ответ в порядке оригинального вопроса. У меня в голове был свой вопрос, а твой ответ нене предоставить мне необходимую информацию. Но, как я уже сказал, ваш ответ правильный. Прости еще раз. +1 за ответ.
 janzoner29 мая 2014 г., 14:19
Привет @devconsole. Я взглянул на источник ContextThemeWrapper.java и не сталнайти способ реализацииgetResources(), Есть только переопределенный методgetResources() какие звонкиsuper.getResources(), Знаете ли вы о другом классе, который реализуетgetResources()? Благодарю.

getResources - это метод, к которому вы можете получить доступ из своего контекста. Таким образом, вы можете думать об этом как:

context.getResources()

Ваш класс Activity является вашим контекстом в этом случае, поэтому вы можете просто вызвать его с помощью синтаксиса:

getResources()

http://developer.android.com/reference/android/content/Context.html#getResources%28%29

Из этих документов:

Интерфейс для глобальной информации о среде приложения. Это абстрактный класс, реализация которого обеспечивается системой Android. Он позволяет получить доступ к ресурсам и классам, относящимся к конкретному приложению, а также к дополнительным вызовам для операций на уровне приложения, таких как запуск, широковещание и получение, и т. Д.

 Tanis.7x04 июн. 2013 г., 18:40
Слишком поздно для редактирования. В любом случае ответ был дополнен этим ответом. Спасибо за разъяснения!

Ваш ответ на вопрос