我有3类甲,乙和Ç。的Android的onCreate()和的onResume()的查询
我把一些对象从A改为B。在B,在onCreate()
,我从意图中拉出这些,并保留它们作为类变量。现在活动B允许用户编辑这些对象。这通过startActivityForResult()
通过将对象从B传递到C而发生。
现在,当用户正与编辑完成后,Ç与修改的对象,并且结束沿通过的结果INT回乙。现在当我回到B,在onActivityResult()
,我拉出这些对象,并更新相应的类变量。但onCreate()
再次调用,类恢复到那个一个送给乙而不是保持该Ç送给乙的那些对象。
现在,如果使得onCreate()
的B每次都访问数据库,并且显然它工作正常。但它看起来很浪费。
那么,我该如何处理这种情况呢?如果onCreate()
无论如何将被称为,似乎onResume()
,startActivityForResult()
和onActivityResult()
是没用的,我不妨将所有的代码在onCreate()
。
请指教!
下面是将用户从乙到Ç
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中的代码,它接收上面的da TA
@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再次使用的旧值结束。
更新:我试图从Ç回去时乙使用intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP)
。这仍然不起作用。我在电话finish()
。任何建议表示赞赏!
更新2:当我在乙把一个调试点在onStop()
,它是越来越只要我切换到Ç调用。难怪B中的onCreate()
将被调用。现在我的问题是为什么onStop()
被调用。我在C做的唯一'非自然'的事情是使用getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
来显示没有键盘的TextEdits。所以我试着将android:configChanges="keyboard|keyboardHidden"
加入到Manifest的活动中,没有任何区别。再次,任何建议表示赞赏。
当必须(重新)创建活动并且无法阻止该活动发生时调用'onCreate'。最初的意图是有用的,所以你有两种不同的意图,你必须以不覆盖它的方式进行管理。 – zapl
将修改后的变量写入意图(或以其他方式保存)。然后检查修改后的值,并在OnCreate中代替默认值加载它们。 – NameSpace
当我在** B **中执行'getIntent()'时,我总是得到我从A发送的那个。这是因为我在** C **中调用了'finish()'而不是'startActivity()' 。那么我应该继续并删除'onResume()','onActivityResult()'等,等等? – rgamber