Когда и почему следует использовать getResources ()? - PullRequest
5 голосов
/ 17 октября 2011

Я только начинаю с Android dev и играю вокруг.

Документация для getResources () говорит, что будет [r]eturn a Resources instance for your application's package.

В примерах кода, которые я видел, это использовалось для доступа к ресурсам в res, но кажется, что вы можете просто получить к ним доступ напрямую.

Например, чтобы извлечь my_string из res/values/strings.xml:

<!-- strings.xml -->
...
<string name="my_string">This is my string</string>
...

Вы можете использовать эти два способа

Первый путь:

// MyActivity.java //  
... 
// No need to use getResources()
String msg = getString(R.string.my_string);
...

Второй способ:

// MyActivity.java //
...
// What is the point of getResources() here?
// It works but it requires "import android.content.res.Resources;" and is longer
Resources the_resources = this.getResources();
String msg = the_resources.getString(R.string.my_string);
...

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

Ответы [ 3 ]

3 голосов
/ 17 октября 2011

Ресурсы имеют много вспомогательных методов, которые нам могут понадобиться.

R.id, R.drawable все возвращают динамическое int, назначенное android во время сборки.Предположим, у нас есть требование, когда нам требуется доступ к изображению флага coutries на основе его имени.

Если у нас есть имя изображения как us.png и значение, которое у нас есть, это «мы».Два способа справиться с этим:

if(countryName.equals("us")){
    imageview.setImageRsource(R.drawable.us);
}

ИЛИ

Resources res = getResources();
int imageId = res.getIdentifier(getIdentifier(countryName, "drawable"
        ,"com.myapp");
imageview.setImageRsource(imageId);

Второй способ - это путь, особенно когда есть более 50 стран, или вы в конечном итоге получитеочень длинный оператор if-else или switch.

Объект ресурсов также используется, когда вам необходим доступ к содержимому в папке «Ресурсы»

res.getAssets().open(YOUR FILE);

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

2 голосов
/ 17 октября 2011

Будет полезно в классах non_activity.

Вы передадите контекст классу, и с этого момента вы сможете получить доступ к ресурсам.

0 голосов
/ 17 октября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...