我有一个对象,我使用Intents将2个活动作为Parseable / Serialisable传递。我想要的是例如当对象从Activity1进入Activity3
时Activity1->Activity2->Activity3
和Activity3在对象中执行一些更改,然后Activity3完成,Activity2完成,我们返回到Activity1,然后我希望Activity1知道在Activity2和Activity3中所做的更改。
请记住,我并不赞成使用Singleton方法,而不是" onActivityResult"因为我可能需要在多个对象中进行更改。我试图使用一种接口到达Activity3的方法来跟踪它,当进行更改时,它也会强制先前的Acitivy更新,但是很难维护它并遵循它。
在iOS中,当您将对象传递到下一个视图时,它是通过引用进行的,因此可以立即进行更改。
有什么建议吗?
答案 0 :(得分:0)
由于这是运行时数据,因此不建议使用共享首选项。创建一个名为RunTimeData.java的类。在此声明所有必需变量为static。每当您需要保存数据时,请将其保存到这些变量中。在其他类中使用数据后,请确保通过将变量设置为null来重新调整变量。
实施例
public class RunTimeData{
public static Object name=null;
}
虽然分配数据的确如下使用。
RuntimeData.name=(Object)name;
String firstName=RunTimeData.name.getFirstName();
使用数据时使用如下。
RunTimeData.name.setLastName("xxx");
RunTimeData.name=name;
当您确定某个地方不再使用该值时,释放该变量。
RunTimeData.name=null;
通过这种方式,您将在活动中维护一个对象。
答案 1 :(得分:0)
可能你可以使用一种设计模式:观察者模式
使用此模式,您可以在活动2和3更改对象时通知活动1。
这里的一些信息:
希望它能解决你的问题!
度过愉快的一天!
答案 2 :(得分:0)
根据我的经验,如果您将对象作为Parcelable传递,它将通过引用传递,并且一个活动中的更改应反映在包含相同引用的所有活动中。
但是,我不认为这是一种非常可靠的方法。我建议使用ContentProvider
并将您的活动注册为内容更改的观察者。
http://www.grokkingandroid.com/use-contentobserver-to-listen-to-changes/
答案 3 :(得分:0)
我使用的方法是:
在我的第一个活动中,我使用以下方式调用第二个:
startActivityForResult(Activity2.class, MyConstants.WAITING_FOR_X_RESULT);
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//check for updated photos
if (requestCode == MyConstants.WAITING_FOR_X_RESULT ) {
if (resultCode == RESULT_OK) {
MyObject myObject = (MyObject ) data.getSerializableExtra(MyConstants.MY_OBJECT_INTENT); //get result from next activity
this.myObject = myObject;
notifyDatasetChanged(); //helper method to reload data
}
}
}
在我结束时的第二个活动中我打电话:
Intent intent = new Intent();
intent.putExtra(MyConstants.MY_OBJECT_INTENT, myObject);
setResult(RESULT_OK, intent);
finish();
如果需要更新数据,当用户按下后退按钮返回时,不要忘记覆盖onBackPressed方法(不要调用超级实现)并从那里调用上面的代码。 / p>