Не получается передать массив строк из одного класса в другой
Есть массив строк в классе 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 шт):
Я бы вам предложил воспользоваться отдельным классом используя паттерн синглтона. Таким образом на период работы с приложением вы всегда сможете использовать массив в разных частях программы. Для начала создадим синглтон:
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);
Ну и наконец - можно использовать базу данных. Но судя по кол-ву данных поднимать ее не имеет смысла. Лучше использовать любой из вариантов представленных выше.