Как получить ресурс из другого класса?

410
16 мая 2017, 02:35

Не могу разобраться как часть кода разместить в другом классе и потом получить к нему доступ.

В классе Resurs я получаю из файла string.xml данные и загружаю их в массив String[] title, так же в этом же классе создаю метод findResurs(), где загружаю в List arrImage картинки, картинок в приложении более четырехсот, здесь для примера только две

public class Resurs {
    private Context context;
    List<Person> persons;
    public Resurs(Context context) {
        Resources res = context.getResources();
        // загружаю в массив
        String[] title = res.getStringArray(R.array.titleString);
    } 
    public void findResurs(){ 
        List arrImage = new ArrayList<>(); 
        arrImage.add(R.drawable.img1); 
        arrImage.add(R.drawable.img2);}
    }

Затем в Активити MainActivity подключаюсь к классу

Resurs resurs = new Resurs(this);

Теперь как можно загрузить данные из Resurs в persons, другими словами получить из Resurs title и arrImage1

int length = title.length;
persons = new ArrayList<>();
for(int i = 0; i < length; i++)
    persons.add(new Person(i, title[i]  arrImage1.get(i)));

Класс Person

public class Person {
long id;
String title;
int photoId;
// пустой конструктор
public Person() {
}
// конструктор с переменными
public Person(long id, String title,  int photoId1) {
    this.id = id;
    this.title = title;
    this.photoId = photoId;
}}
Answer 1

Я бы предложил класс Resources(такое название правильнее Resurs) считать набором инструментов для загрузки данных из ресурсов, а метод получения персон реализовать статичным. Например так:

public class Resources {
    public static Person[] loadPersons(Context ctx){
        Resources res = context.getResources();
        // загружаю в массив
        String[] title = res.getStringArray(R.array.titleString);
        // статичное определение списка картинок
        int[] images = {R.drawable.img1, R.drawable.img2, ..., R.drawable.imgN};
        if(title.lenght != images.lenght)
            // количество картинок не соответствует количеству имён
            throw new IllegalStateException();
        Person[] persons = new Person[title.lenght];
        for(int i = 0; i < persons.length; i++)
            persons.add(new Person(i, title[i],  images.get(i)));
        return persons;
    }
}

Что касается кэширования - считаю, что это нужно оставить на усмотрение вызывающего кода. Не стоит перегружать класс Resources ещё и этой ответственностью.

READ ALSO
Создание новых листов Excel (Java) (Apache POI)

Создание новых листов Excel (Java) (Apache POI)

При записи из JTable в Excel постоянно создается новый файл с xls, вместо создания новых листовК примеру :

392
Изменение интерфейса из второго класса

Изменение интерфейса из второго класса

Есть класс MainActivity из которого запускаю другой класс, через startintent, допустим, TwoActivityНо TwoActivity не видит интерфейс, то есть findViewById не видит ID элементов...

262
Ручной маппинг в веб интерфейсе (java)

Ручной маппинг в веб интерфейсе (java)

Подскажите лучшие инструменты для написание веб интерфейса, задача - маппинг 2х java классов

242