从水平切换到垂直时,我的应用程序会重置我的整数 [重复]

Posted

技术标签:

【中文标题】从水平切换到垂直时,我的应用程序会重置我的整数 [重复]【英文标题】:My app resets my integers when switching from horizontal to vertical [duplicate] 【发布时间】:2014-07-28 18:06:22 【问题描述】:

所以这是我在 android 上的第一个应用程序,它运行良好。但是,当我将屏幕倾斜到水平视图时,我的整数会重置为零。如果我从水平开始然后将其切换到垂直,它也会将整数重置为零。我怎样才能让它不重置而只是切换?

【问题讨论】:

每次倾斜设备时,您的应用都会重新启动 【参考方案1】:

覆盖onSaveInstanceState(Bundle outState) 方法。将您的数据放入outState 捆绑包中,然后在onCreate(Bundle savedInstanceState) 中,从savedInstanceState 中提取数据。

如果您的数据比普通整数更复杂,并且没有实现Parcelable 接口,请使用Fragment

【讨论】:

【参考方案2】:

每次倾斜设备时,您的应用都会重新运行一个活动。在旋转之前,您必须将数据保存在共享首选项文件中,因为旋转会终止 Activity,以便它可以以新的方向再次运行。

有关如何存储数据,请参阅此链接:http://developer.android.com/reference/android/app/Activity.html#SavingPersistentState

【讨论】:

使用SharedPreferences 在方向变化之间存储数据是多余的。而且,它涉及到磁盘I/O,所以方向变化会比较慢。 @deville,感谢您的建议,您有什么建议? 相反,我建议覆盖onSaveInstanceState(Bundle outState) 方法。将您的数据放入outState 捆绑包中,然后在onCreate(Bundle savedInstanceState) 中,从savedInstanceState 中提取它。【参考方案3】:

如果您不想保存数据,一个快速的“修复”方法是进入您的 AndroidManifest.xml 文件并执行以下操作:

    选择活动(我假设它是您的 MainActivity) 找到标有“屏幕方向”的字段 将其更改为“纵向”(以防止手机水平倾斜时屏幕发生变化)

您也可以在您的 AndroidManifest 文件的 xml 中执行此操作,如下所示:

    <activity
        ...
        android:name="yourApp.MainActivity"
        android:screenOrientation="portrait"
        ...
    </activity>

编辑 - 请记住

“这是我在安卓上的第一个应用”

如果您只是在测试,锁定方向是阻止这种行为的一种完全合理的方法,但它绝不是任何“真实”项目中的可行解决方案。

【讨论】:

永远不要这样做。这是最后的手段。 锁定方向不是 OP 要求的“修复”。锁定方向是一项设计决策 - 它可能适用于某些应用程序设计,但不应仅用于防止配置更改以防止重新创建 Activity “如果您只是在测试,锁定方向是阻止这种行为的一种完全合理的方法” - 不,不是。在测试时阻止它发生的一个完全合理的方法就是不要旋转设备。 不是每个人的手都这么稳...

以上是关于从水平切换到垂直时,我的应用程序会重置我的整数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Vim 中快速从垂直拆分切换到水平拆分

当用户滚动时将菜单从水平移动到垂直?

更改为横向会使我的 Android 应用程序崩溃

Emacs 快捷方式一键从水平拆分切换到垂直拆分?

滚动其他滚动视图时滚动视图重置

如何使 Android SlidingDrawer 从左侧滑出?