屏幕旋转后不会调用 onSaveInstanceState

2024-01-22

我知道有很多关于 onSaveInstanceState 的问题,但我无法找到问题的答案。

我有一个扩展 AppCompatActivity 的活动;此活动使用 3 个片段,它有一个变量“int currentStep”来跟踪正在显示的片段。在 onSavedInstanceState 方法中,我将 currentStep 变量存储在包中,然后在 onCreate 方法中恢复它。

public class MainActivity extends AppCompatActivity {
    private final String CURRENT_STEP_TAG = "current_step";
    private int currentStep;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pedido);        

        if(savedInstanceState == null) {
            loadFirstFragment();
        } else {            
            currentStep = savedInstanceState.getInt(CURRENT_STEP_TAG);
            if(currentStep == 2){
                //Do some stuff...
            }
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        Log.d("deubg", "--------onsaveinstancestate--------");
        outState.putInt(CURRENT_STEP_TAG, currentStep);
        super.onSaveInstanceState(outState, outPersistentState);
    }

 ...

}

问题是,当屏幕方向发生变化时, onSavedInstanceState 不会被调用,而根据谷歌文档,它应该被调用。消息“--------onsaveinstancestate--------”不会显示在控制台中。 然而,屏幕旋转后,方法 onCreate 中的 Bundle savingInstanceState 不为 null,但它没有 int 'currentStep'。

我尝试了很多事情:将 AppCompatActivity 更改为 ActionBarActivity,将 super.onSavedInstanceState 的调用移动到不同的位置,尝试存储其他变量;但无论我做什么,该方法都不会执行。

另外,我的清单中没有 android:configChanges 。

我的应用程序正在针对 sdk 版本 22、buildToolsVersion 22.0.1 进行编译


除非你的应用程序是running在 Lollipop (API 21) 版本的 Android 或更高版本上,您的

public void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState);

will NOT被调用,因为它根本不存在于 21 之前的平台版本上。要支持 API 21 之前的设备,您必须重写以下方法,而不是上面的方法:

public void onSaveInstanceState (Bundle outState);

这也适用于 API 21+,因此您当然不需要重写这两个方法(除非您知道需要处理PersistableBundle新的优惠)。

See docs https://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle,%20android.os.PersistableBundle).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

屏幕旋转后不会调用 onSaveInstanceState 的相关文章

随机推荐

  • 我可以向 HTML 标记添加自定义属性吗?

    我可以向 HTML 标记添加自定义属性吗 如下所示
  • 在 Google App Engine 中创建表单自动完成

    我想为标签字段构建一个自动完成功能 就像 App Engine 上的 SO 一样 知道我应该如何进行这个过程吗 服务器端算法 自动完成应该有什么逻辑 应用程序引擎实施 数据存储架构应该是什么 嘿 几天前我就遇到了这个问题 只要您有想要搜索的
  • 如何在 ASP.Net Core Razor 页面中返回带有模型的页面

    如何重定向到页面并传递其模型 就像我们在 MVC 中所做的那样return View model MyModel 我尝试过的 return RedirectToPage Notify new Model notifierVM 注意 我要返回
  • 如何立即关闭 C 程序?

    我正在编写 C 代码 在其中分析一些数据 我已将程序设置为仅处理 100 个数据输入 当输入超过 100 个时 就会出现分段错误 我想创建一种方法 以便当输入数量超过 100 时 用户将收到警告并且程序将终止 我知道如何从主要功能中简单地做
  • MyGroups 未在 Communicator.UIAutomation 中实现

    我正在开发一个浏览器外的 Silverlight 应用程序 它提供了一些 MS Office Communicator 2007 控件 我正在使用 与 SDK 一起安装的文档指出 IMessenger2 界面中有一个 MyGroups 属性
  • 测试 swift 异步函数超时

    如何编写一个单元测试来检查异步函数是否不会超时 我正在尝试常规XCTestExpectation 但是因为await暂停一切 是等不到期待 在下面的代码中 我正在检查loader perform 执行时间不超过1秒 func testLoa
  • 在 KnockoutJS 中获取可观察的多维数组(对象)

    我正在使用 Knockout 构建一个应用程序 发现它非常有用 虽然 我在获取多维数组 对象 可观察时遇到问题 目前我正在使用以下结构 self form ko observableArray ko utils arrayMap initi
  • /bin/sh: python: 找不到命令

    我刚刚安装了 Python3 和 Komodo 我正在尝试运行一个简单的脚本 但收到 py 命令未找到的错误 我对 Komodo 和 Python 都是新手 所以不知道该去哪里寻找 我看到另一篇文章也有同样的问题 但没有提供有帮助的解决方案
  • 虚拟继承的内部机制

    C 示例代码 class A public A int class B public virtual A public B int b A b class C virtual public A public C int c A c clas
  • 在 jQuery Mobile 中的 Ajax 调用上显示页面加载微调器

    我正在使用 ajax 填充我的移动网络应用程序中的列表 我想做的是让 jQuery 移动加载微调器在执行此调用时出现 并在列表填充后消失 当前版本的 JQM 使用 mobile showPageLoadingMsg and mobile h
  • 如何使操作栏图标在单击时发生变化

    我在 Sherlock ActionBar 中有一组紫色背景的白色图标 我想让它们在被点击时变成深紫色 我有相同的深紫色图标 所以我想让这些可绘制对象显示在按下状态 现在 我知道如何在整个应用程序主题中执行此操作 但这意味着我必须对所有图标
  • 阻止本地网站在 Chrome 上强制使用 HTTPS?

    Chrome 已更新为在某些保留的域名上强制使用 HTTPS 不幸的是我的本地计算机之一出现在列表中 我的机器名称是 dev Chrome 现在自动重定向 http dev http dev 到 https dev https dev 我在
  • Java获取本地IP [重复]

    这个问题在这里已经有答案了 我正在尝试获取本地IP 它应该与 System out println Inet4Address getLocalHost getHostAddress or InetAddress addr InetAddre
  • jquery map函数对表的使用

    我有这张表 table thead tr th UtstyrsID th th Navn th th Utlevert th th Kommentar th tr thead tbody tr td 1 td tr tbody table
  • Java - 帮助在任意锚点绘制文本的最佳库[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我熟悉如何使用各种 FontMetrics 函数使文本垂直 水平居中等 但是 我正在寻找一个支持在相对
  • 使用组合键中的一列作为外键

    我试图看看是否可以使用复合键中的一列作为外键 我得到了奇怪的结果 CREATE TABLE TESTPARENT PK1 INT PK2 INT PRIMARY KEY PK1 PK2 Query OK 0 rows affected 0
  • C# 属性名称缩写

    C 属性的名称中怎么可能有 Attribute 例如DataMemberAttribute 但初始化时没有这个后缀 例如 DataMember private int i 根据C 语言规范 http msdn microsoft com e
  • 使用 Akka 进行依赖注入

    我在我的应用程序中经常使用 Guice 最近我开始学习 akka actor 并想用它重构我的应用程序 然而 一开始我就想知道我的所有技巧将如何与演员合作 我继续在谷歌上搜索 结果有点混乱 我找到的关于该主题的最新文档是 http leti
  • python 中的文本语言检测

    我正在尝试检测可能由未知数量的语言组成的文本的语言 下面的代码给了我不同的语言作为答案注意 我减少了评论 因为它在发布 不允许时给出错误 print detect print detect 的马来西亚 print detect Vi hav
  • 屏幕旋转后不会调用 onSaveInstanceState

    我知道有很多关于 onSaveInstanceState 的问题 但我无法找到问题的答案 我有一个扩展 AppCompatActivity 的活动 此活动使用 3 个片段 它有一个变量 int currentStep 来跟踪正在显示的片段