Как взять массив из строкового ресурса и поместить в массив String

276
07 августа 2018, 01:00

Как взять массив из строкового ресурса и поместить в массив String?
В Android проекте есть массив строк:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string-array name="regions_list_values">
    <item>region_1</item>
    <item>region_2</item>
    <item>region_3</item>
    <item>region_4</item>
    <item>region_5</item>
    <item>region_6</item>
  </string-array>
</resources>

В коде Activity этот массив забираю вот так:

List<String> totalArrayList = new ArrayList<String>();
String []resurs = getResources().getStringArray(R.array.regions_list_values);
totalArrayList.addAll(Arrays.asList(resurs));

Никаких проблем. Но если создать *.java класс, эта конструкция не работает: ошибка при вызове getResources().getStringArray...

Answer 1

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

public class AppTest extends Application {
    private static AppTest instance;
    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
    }
    public static Context getContext(){
        return instance.getApplicationContext();
    }
}

A вызов данного метода будет выглядеть так:

resurs = App.getContext().getResources().getStringArray(R.array.regions_list_values);

Помимо этого вам нужно знать, что нужно будет в Manifest.xml указать в разделе <application> имя вашего класса приложения:

<application
        android:name=".AppTest"
Answer 2

Вы не описали, что конкретно за ошибка у вас происходит, но скорее всего метод getResources у вас оказывается не найден.

В коде Activity всё работает потому, что этот метод определен у класса, от которого Activity наследуется.

Для того, чтобы в другом классе в каком-то методе вы могли сделать тоже самое, вам нужно передать ссылку на контекст, или на саму активити, чтобы нужный метод вызывать (или сразу нужный массив).

Иначе сделать не получится.

READ ALSO
Не удается подключить LESS к проекту

Не удается подключить LESS к проекту

Делаю всё по науке - качаю lessmin

233
Как нарисовать и аниммировать svg линии?

Как нарисовать и аниммировать svg линии?

Как в SVG нарисовать и анимировать 2 линии, чтобы сначала "нарисовалась" одна прямая, затем вторая?

206