使用Parcelable修改通过Intent发送的对象

时间:2018-09-26 21:08:55

标签: java android

我目前正在通过意图在活动之间发送对象。我正在使用Parcelable界面。

似乎第二个拾取对象的活动是传入对象的NEW实例。

例如,在firstActivity.class中,我有

foo f = new foo();
Intent i = new Intent(context, secondActivity.class);
i.putExtra("foo", f);
startActivity(i);

在我的secondActivity.class中,我有

foo f = getIntent().getParcelableExtra("foo");
f.setName("a");

然后,当我返回firstActivity.class时,我会做

f.getName(); // returns null

问题是:如何在活动之间传递相同的对象,以便可以在不同的活动中修改其数据?

1 个答案:

答案 0 :(得分:0)

Parcelable界面提供了一种序列化来自您的类的数据并在其他地方重新创建它的方法。这意味着使用Parcelable总是会导致您从某个地方(例如,从Bundle读取)创建新实例。

如果您需要退回Parcelable,则可以使用活动结果发送您创建和更新的新对象,但是我建议您不要这样做。对于您所需要的简单操作,这是太多的工作。

您可以将这两个活动共享一个对象,方法是将其保存在与这些活动的生命周期无关的某个位置(在Application或任何类型的singleton中。

例如:

enum Singleton {
    INSTANCE;

    private Foo foo;

    public Foo getFoo() {
        return foo;
    }

    public void setFoo(Foo foo) {
        this.foo = foo;
    }
}

活动1:

Singleton.INSTANCE.setFoo(new Foo());

活动2:

Singleton.INSTANCE.getFoo().setName("a");

活动1:

Singleton.INSTANCE.getFoo().getName(); // Should be "a" now

如果您需要保留此名称,则不应使用这种方式,因为一旦系统终止该应用程序(由于任何原因,当应用程序在后台运行时,它就会发生),它将被清除。在这种情况下,应该使用某种数据库。

我希望这会有所帮助。