当屏幕方向改变时保存屏幕状态

3
我正在屏幕上显示当前位置地址。有人告诉我在清单文件中添加(android:configChanges="keyboardHidden|orientation")以存储上下文(地址)。它可以正常工作,但是添加此行后,屏幕方向不会改变。如果我删除此行,则方向效果良好,但地址在更改方向时消失。如果有人知道如何解决这个问题,请在评论中提出。谢谢。

@Spoorti:嗨..在Android清单中尝试使用android:configChangesandroid:screenOrientation="unspecified" - Hussain
@Spoorti:方向没有改变还是您没有获取到地址? - Hussain
我正在获取地址。但如果我添加android:configChanges="keyboardHidden|orientation",那么方向就不会改变。 - Spoorti
<activity android:name=".activity1" android:label="@string/app_name" android:theme="@style/Theme.Translucent" android:configChanges="orientation|keyboardHidden" android:screenOrientation="unspecified"> </activity> - Hussain
@Spoorti:我正在使用上面的代码。它允许更改方向,但不会重新创建活动。 - Hussain
显示剩余2条评论
3个回答

2
在清单文件中使用android:configChanges="orientation|screenSize"。

0

我已经浏览了这些网站。因此,如果我编辑我的代码,那么地址会被存储,但方向仍然保持不变,水平或垂直。 - Spoorti

0
当您旋转屏幕时,Android会重新绘制整个活动以适应新的方向。这涉及再次调用onCreate(),这就是为什么您的地址会消失的原因。查看onSaveInstanceState,这是一个Activity方法,您可以重写它来存储任何需要在活动关闭和重新打开时保留的内容。只需将数据打包到Bundle中,然后您就可以在onCreate()中的Bundle中再次访问它。
听起来过于复杂,但这是处理它的正确方式。 Android可以因任何数量的原因关闭您的活动 - 屏幕旋转只是一个非常容易测试的原因。如果它适用于旋转,则很可能适用于其他情况,例如低内存等。

我已经使用了onSaveInstanceState(Bundle savedInstanceState)和onRestoreInstanceState(Bundle savedInstanceState),但是位置地址仍然消失了。 - Spoorti
@Spoorti,你能否发布代码,展示一下你当前是如何保存/恢复地址的? - RawwrBag
@Override public void onSaveInstanceState(Bundle savedInstanceState) { savedInstanceState.putString("MyString", result.toString()); super.onSaveInstanceState(savedInstanceState); }@Override public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); String myString = savedInstanceState.getString("MyString"); } - Spoorti
我是一个新用户。我不知道如何格式化代码。你能帮忙吗? - Spoorti
在上述代码中,result.toString() 给出了位置地址。 - Spoorti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接