方法返回时,将重置onActivityResult中设置的类变量

时间:2010-01-16 02:31:29

标签: android

我有一项活动让用户选择一个电话号码。当然,我希望我的班级能够记住所选联系人的ID,所以我将其保存在课程领域。但是当onActivityResult方法返回时,我的类变量被重置。这是我正在尝试做的事情:

    Intent intent = new Intent(Intent.ACTION_PICK, People.CONTENT_URI);
    startActivityForResult(intent, PICK_CONTACT); 

    ...

    public void onActivityResult(int reqCode, int resultCode, Intent intent){
        super.onActivityResult(reqCode, resultCode, intent);       
        switch(reqCode){
            case(PICK_CONTACT):
                if(resultCode == Activity.RESULT_OK){
                    Uri contactData = intent.getData();
                    Cursor c = managedQuery(contactData, null, null, null, null);
                    if(c.moveToFirst()){
                        contactName = c.getString(c.getColumnIndexOrThrow(People.NAME));
                        contactId = c.getInt(c.getColumnIndexOrThrow(People._ID));

        break;

当我在此方法中设置断点时,contactName和contactId的值正如我所期望的那样,但是一旦方法返回,值就会以某种方式重置为默认值。很明显我错过了什么,但我不确定我做错了什么或遗忘。

谢谢!

伊娃

3 个答案:

答案 0 :(得分:1)

您的Activity可能被暂停并重新创建。

基本上,如果您使用startActivityForResult启动的Intent资源密集程度很高,则操作系统可能必须暂停您的Activity以释放资源。

所以它保存了它可以然后从Intent返回来调用onActivityResult,它必须重新创建你的Activity。在这种情况下,任何实例变量都将被重置。

您可以通过重新启动设备或使用onSaveInstanceStateonRestoreInstanceState处理设备来解决此问题。

在这里阅读更多内容: Why oncreate method called after startActivityForResult?

答案 1 :(得分:0)

不确定您是否仍需要帮助。当您的活动重新启动时,onResume之前会调用onActivityResult。确保您没有在onResume中重置变量值。

  

当您的活动重新开始时,您将在onResume()之前立即收到此电话。

http://developer.android.com/reference/android/app/Activity.html#onActivityResult(int,int,android.content.Intent)

答案 2 :(得分:0)

打开新的“活动”时,您的配置可能正在更改。尝试在您的AndroidManifest活动中使用configChanges

android:configChanges="orientation|keyboardHidden|screenSize"