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

Есть массив строк в классе Unit. Мне необходимо передать его в класс Add_Ing. Перечитал не один десяток статей, но всё, что у меня получилось, это обратиться к определённому индексу массива из второго класса и достать соответствующее значение. Можно ли как-то создать массив в классе Add_Ing и записать в него все данные из массива класса Unit.

Класс Unit ( содержит исходный массив )

public class Unit extends AppCompatActivity {

public static ArrayList<String> units = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_unit);
    setTitle("Единицы измерения");

    units.add("л");
    units.add("мл");
    units.add("гр");
    units.add("кг");
    units.add("ч.л.");
    units.add("ст.л.");
    units.add("шт.");
    units.add("зуб.");
    }
}

Класс Add_Ing

public class Add_ingred extends AppCompatActivity implements View.OnClickListener {
EditText et_unit;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_ingred);
    et_unit = findViewById(R.id.et_unit);
    // Обращение к определённому индексу массива из класса Unit
    String a;
    a = Unit_ing.units.get(0);

    et_unit.setText(a);
}

Ответы (1 шт):

Автор решения: Andrew

Я бы вам предложил воспользоваться отдельным классом используя паттерн синглтона. Таким образом на период работы с приложением вы всегда сможете использовать массив в разных частях программы. Для начала создадим синглтон:

public class Singleton { 
    private static Singleton instance; 

    private Singleton (){ 
    } 

    public static Singleton getInstance(){ 
        if (null == instance){ 
           instance = new Singleton(); 
        } 
        return instance; 
    } 
}

теперь добавим в него переменную вашего массива:

 ArrayList<String> units = new ArrayList<>();

будет как-то так:

public class Singleton { 
        private static Singleton instance; 
        ArrayList<String> units = new ArrayList<>();

        private Singleton (){ 
        } 

        public static Singleton getInstance(){ 
            if (null == instance){ 
               instance = new Singleton(); 
            } 
            return instance; 
        } 
    }

дальше при работе с массивом из класса-активности Unit мы сетим данные в массив из синглтона:

Singleton().getInstance().units = units;

и дальше в другой активности мы можем взять данные из него:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_ingred);
    ...



     ArrayList<String> sinUnits = Singleton().getInstance().units;

    ...
     }

Так же есть и второй вариант - использовать SharedPreferences. Сохраняя данные в настройки приложение вы сможете их использовать даже после того как убьете и заново запустите активность:

SharedPreferences prefs = getSharedPreferences("storage", Context.MODE_PRIVATE);
Set<String> set = new HashSet<String>();
set.addAll(listOfExistingScores);
prefs.putStringSet("key", set).commit();

получить данные можно таким способом:

Set<String> set = myScores.getStringSet("key", null);

Ну и наконец - можно использовать базу данных. Но судя по кол-ву данных поднимать ее не имеет смысла. Лучше использовать любой из вариантов представленных выше.

→ Ссылка