我有3个课程 A , B 和 C 。
我将一些对象从 A 传递给 B 。在 B 中,在onCreate()
中,我将这些从意图中拉出来,并将它们保存为类变量。现在,活动 B 允许用户编辑这些对象。这是通过{<1}}将对象从 B 传递到 C 来实现的。
现在,当用户完成编辑后, C 将结果int与修改后的对象一起传回 B ,然后结束。现在当我回到 B 时,在startActivityForResult()
中,我将这些对象拉出来,并更新相应的类变量。但是再次调用onActivityResult()
,类会恢复为 A 赋予 B 的对象,而不是保留 C 给 B 。
现在,如果这样做, B 的onCreate()
每次都会访问数据库,显然它可以正常工作。但这似乎很浪费。
那么,我该如何处理这种情况?如果无论如何都要调用onCreate()
,onCreate()
,onResume()
和startActivityForResult()
似乎毫无用处,我可能会将所有代码放入{{ 1}}。
请指教!
以下是将用户从 B 转移到 C
的代码onActivityResult()
以下是 C 中将数据传回 B
的代码onCreate()
以下是接收上述数据的 B 中的代码
public void goToC(View v) {
Intent intent = new Intent(this, C.class);
intent.putExtra("STUFF", stuff);
startActivityForResult(intent, 1);
}
正如我所说,这段代码可以正常工作,但是在此之后执行long rowsUpdated = myModel.updateStuff(this, stuff);
if (rowsUpdated == 1) {
Intent intent = new Intent(this, B.class);
// put the data in the intent
intent.putExtra("STUFF", stuff);
// set the flags to reuse B
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
// set result code to notify the ItemEntriesActivity
setResult(1, intent);
// finish the current activity i.e. C
finish();
}
,活动B最终会再次使用旧值。
更新:从 C 返回 B 时,我尝试使用 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (intent != null) {
switch (resultCode) {
case 1:
// Update the class variable, so that onResume() gets the updated value
stuff = intent.getExtras().getParcelable("STUFF");
break;
default:
break;
}
}
}
。这仍然不起作用。在B我没有任何地方打电话给B.onCreate()
。任何建议表示赞赏!!!
更新2 :当我将调试点放在 B 中的intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP)
时,我会在切换到 C后立即调用它即可。难怪B中的finish()
将被调用。现在我的问题是onStop()
被调用的原因。我在C中做的唯一“不自然”的事情是使用onCreate()
显示没有键盘的TextEdits。所以我尝试将onStop()
添加到Manifest中的活动,没有区别。再次,任何建议表示赞赏。
答案 0 :(得分:0)
您正在创建Intent
以便
Intent intent = new Intent(this, B.class);
此构造函数将创建另一个B
实例,它将确实调用onCreate()
。您应该使用空构造函数
Intent intent = new Intent();
// set result code to notify the ItemEntriesActivity
setResult(1, intent);
// finish the current activity i.e. C
finish();