繁体   English   中英

Android onCreate()和onResume()查询

[英]Android onCreate() and onResume() query

我有ABC三班。

我将一些物体从A传递到B。 BonCreate() ,我将它们从意图中拉出,并将其保留为类变量。 现在,活动B允许用户编辑那些对象。 这是通过将对象从B传递到C通过startActivityForResult()发生的。

现在,当用户完成编辑后, C会将结果int与修改的对象一起传递回B并完成。 现在,当我回到B时 ,在onActivityResult() ,将这些对象拉出,并更新相应的类变量。 但是onCreate()再次被调用,并且该类恢复为AB的对象,而不是保留CB的对象

现在,使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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM