Я создаю объект под названием "AppEngine" внутри моей первой деятельности. Этот объект AppEngine хранит и arrayList of Events, и начинается с двух событий внутри него.
В первой операции я нажимаю кнопку, которая переводит меня во вторую операцию, в которой я добавляю объект события в arrayList с помощью.
appEngine.getList.add(new Event)
Находясь внутри appEngine.getList.size()
2, если мне нужно вызвать appEngine.getList.size()
размер правильно возвращается как 3, и я вижу дополнительное событие.
Когда я переключаюсь обратно на действие 2, я appEngine.getList.size()
однако он возвращает только 2, и дополнительного события там нет. Как я могу получить объект appEngine для обновления?
Вы можете использовать Singleton Design Pattern.
Вы создаете один объект из AppEnginRepository с полем eventList, а в своем приложении вы просто получаете его и каждый раз, когда хотите, меняете его.
public class AppEnginRepository {
private List<Event> eventList;
private static final AppEnginRepository ourInstance = new AppEnginRepository();
public static AppEnginRepository getInstance() {
return ourInstance;
}
private AppEnginRepository() {
eventList = new ArrayList<>();
}
public List<Event> getEventList() {
return eventList;
}
public void setEventList(List<Event> eventList) {
this.eventList = eventList;
}
}
В вашей деятельности
AppEnginRepository enginRepository=AppEnginRepository.getInstance();
List<Event> eventList=enginRepository.getEventList();
eventList.add(new Event());
int eventListSize=eventList.size();
Было бы хорошо думать, что каждое действие полностью отделено от выполнения. Технически это спорно, но хорошо предположение для разработки экологически чистого и безопасного программного обеспечения.
Исходя из этого предположения, существует несколько подходов к ведению данных между операциями в приложении.
Каждый подход имеет одинаковую моду; должно быть изолированное и независимое хранилище, которое не принадлежит ни одному из Activity, но принадлежит ApplicationContext или его базовой операционной системе.
сохраните список массивов в общих настройках, как это, создайте класс AppPreference: -
public class AppPreference {
private static SharedPreferences mPrefs;
private static SharedPreferences.Editor mPrefsEditor;
public static Set<AppEngine> getList(Context ctx) {
mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
return mPrefs.getStringSet("AppEngineList", null);
}
public static void setList(Context ctx, ArrayList<AppEngine> value) {
mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
mPrefsEditor = mPrefs.edit();
Set<String> set = new HashSet<>();
set.addAll(value);
mPrefsEditor.putStringSet("AppEngineList", set);
mPrefsEditor.commit();
}
}
установите свою ценность от первого действия как это: -
setList(YourActivity.class, list);
и получите свой список из любого места в вашем приложении: -
ArrayLis<AppEngine> list = AppPreference.getList(yourActivity.class);
Если вы хотите, чтобы объект appEnginge сохранялся только в течение одного сеанса приложения, а не сохранялся при закрытии/перезапуске полного приложения, то вам следует использовать класс обработчика.
EngineHandler.java:
public static class engineHandler {
public static appEnginge _appEngine;
}
а потом просто позвони
engineHandler._appEngine = _myAppengine;
engineHandler._appEngine.getList().add(new Event);
от вашей деятельности. EngineHandler будет доступен из любой активности в вашем приложении.