Передача данных в глобальных переменных Java
В MainActivity объявляю переменную типа массив:
....
private String[] textitems;
public String[] getTextitems(){
return textitems;
}
.....
Заполняю этот массив в цикле:
for (int i=0; i < items.length(); i++){
JSONObject item = (JSONObject) items.get(i);
String item_text = (String) item.get("text");
textitems[i] = item_text;
}
Объявляю его в другом классе:
private String[] textitems;
public void setTextitems(String[] textitems){
this.textitems = textitems;
}
Вызываю:
...
TextView tvPage = (TextView) view.findViewById(R.id.tvPage);
tvPage.append(textitems[pageNumber]);
...
Насколько я все верно делаю?
Ответы (1 шт):
- Одноимённые переменные в двух разных классах - это две разные переменные и присвоение значения одной никак не влияет на вторую.
- когда активность не на переднем плане (не видна) можете считать, что её не существует, так как менеджер памяти имеет полное право её уничтожить в любой момент и, соответственно, все её переменные будут обнулены.
Технически возможно записать значение в static поле и из другой активности получить их, но делать так тоже не желательно. Например, если пользователь свернул приложение, и системе понадобилось освободить память для других задач, то может быть выгружен весь процесс и по возвращению к нему будет запущена сразу последняя открытая активность и данных в этом поле уже не будет.
Передавать данные между активностями нужно через интент, либо сохранять в файл, базу, преференсы и т.п., а во второй читать оттуда.
В случае с интентом, даже если приложение будет выгружено, то по возвращению к нему активность получит тот же интент со всеми данными.