Android onCreate()和onResume()查询

时间:2014-02-09 03:22:53

标签: android android-lifecycle oncreate onresume

我有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中的活动,没有区别。再次,任何建议表示赞赏。

1 个答案:

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