[英]Android onCreate() and onResume() query
我有A , B和C三班。
我将一些物体从A传递到B。 在B的onCreate()
,我将它们从意图中拉出,并将其保留为类变量。 现在,活动B允许用户编辑那些对象。 这是通过将对象从B传递到C通过startActivityForResult()
发生的。
现在,当用户完成编辑后, C会将结果int与修改的对象一起传递回B并完成。 现在,当我回到B时 ,在onActivityResult()
,将这些对象拉出,并更新相应的类变量。 但是onCreate()
再次被调用,并且该类恢复为A给B的对象,而不是保留C给B的对象 。
现在,使B的 onCreate()
每次都访问数据库,显然可以正常工作。 但这似乎很浪费。
那么,我该如何处理这种情况? 如果无论如何都要调用onCreate()
,似乎onResume()
, startActivityForResult()
和onActivityResult()
都是无用的,我不妨将所有代码都放在onCreate()
。
请指教!
这是将用户从B转到C的代码
public void goToC(View v) {
Intent intent = new Intent(this, C.class);
intent.putExtra("STUFF", stuff);
startActivityForResult(intent, 1);
}
这是C中将数据传递回B的代码
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中接收上述数据的代码
@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.onCreate()
在此之后执行,因此活动B再次使用旧值结束。
更新 :我尝试从C返回到B时使用intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP)
。 这仍然行不通。 我在B的任何地方都没有打电话给finish()
。 任何建议表示赞赏!!!
更新2 :当我在B中的onStop()
中放置一个调试点时,切换到C就会立即调用它。 难怪B中的onCreate()
会被调用。 现在我的问题是为什么要调用onStop()
。 我在C语言中所做的唯一“不自然”操作是使用getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
在没有键盘的情况下显示TextEdits getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
。 因此,我尝试将android:configChanges="keyboard|keyboardHidden"
到清单中的活动中,没有区别。 再次,任何建议表示赞赏。
您正在创建与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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.