android - onActivityResult 中设置的类变量在方法返回时重置

标签 android

我有一个让用户选择电话号码的 Activity 。当然,我希望我的类(class)记住所选联系人的 ID,因此我将其保存在类(class)字段中。然而,当方法 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 的值如我所料,但是一旦该方法返回,这些值就会以某种方式重置为其默认值。显然我遗漏了什么,但我不确定我做错了什么或忘记了什么。

谢谢!

伊娃

最佳答案

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

本质上,如果您使用 startActivityForResult 启动的 Intent 是资源密集型的,操作系统可能必须暂停您的 Activity 以释放资源。

因此它会尽可能地保存,然后从 Intent 返回以调用 onActivityResult,它必须重新创建您的 Activity。在这种情况下,任何实例变量都将被重置。

您可以通过重启设备或使用 onSaveInstanceStateonRestoreInstanceState 来解决这个问题。

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

关于android - onActivityResult 中设置的类变量在方法返回时重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2075977/

相关文章:

android - LinearLayout 中 View 之间的意外空间

java - 如何在自定义 View 中访问当前 View ?

android - InputTextLayout,将错误文本设置为帮助文本(不同颜色)

android - 如何使用另一个布局的新实例来扩充布局?

android - Facebook api并向android中的多个 friend 发送邀请

Android:将应用程序注册为接收者

java - Google Play - 零支持的设备

java - 当我尝试将数据从 sqlite 传递到新 Activity 时出现错误抛出 recyclerview (Android)

java - Firestore 需要双嵌套表

Android - 什么数据结构来存储视频字幕以在 O(1) 时间内获取它们