从另一个活动更新存储在一个活动中的对象

时间:2019-04-12 13:37:15

标签: android android-activity

我要在第一个活动中创建一个名为“ AppEngine”的对象。这个AppEngine对象存储事件的arrayList和事件,并在其中包含2个事件。

在第一个活动中,单击一个按钮,将我带到第二个活动,在第二个活动中,我通过使用将事件对象添加到arrayList。

appEngine.getList.add(new Event)

在活动2中,如果我要呼叫appEngine.getList.size(),则大小正确返回为3,我可以看到额外的事件。

当我切换回活动2时,我正在呼叫appEngine.getList.size(),但它仅返回2,并且没有额外的事件。如何获取要更新的AppEngine对象?

4 个答案:

答案 0 :(得分:0)

将数组列表保存为共享首选项,如下所示,创建一个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);

答案 1 :(得分:0)

如果您只希望appEnginge对象在单个应用会话中持续存在,而不希望在整个应用关闭/重新启动过程中持续存在,则应使用处理程序类。

EngineHandler.java:

public static class engineHandler {
   public static appEnginge _appEngine;
}

然后致电

engineHandler._appEngine = _myAppengine;
engineHandler._appEngine.getList().add(new Event);

您的活动中。您可以通过应用程序中的任何活动访问engineHandler。

答案 2 :(得分:0)

最好将每个Activity完全独立地执行。从技术上讲,这是有争议的,但是设计更干净,更安全的软件是一个很好的假设。

基于假设,有几种方法可以在应用程序的“活动”中维护数据。

  • 作为@Sandeep Malik的答案,请使用SharedPreference操作系统提供的存储。
  • 类似于@Joachim Haglund的答案,使用Singleton模式来维护应用程序中的对象。
  • 或者,使用小型数据库,例如Realm

每种方法都有类似的方式;应该有一个隔离的独立存储,该存储不属于Activity之一,而是属于ApplicationContext或其基础操作系统。

答案 3 :(得分:0)

您可以使用 Singleton 设计模式。

您可以从带有事件列表字段的 AppEnginRepository 创建一个对象,然后在您的应用中获取它,并且每次您想要更改

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();