2017-05-09 68 views
0

所以我使用Visual Studio编写了一个Android应用程序。我想要一个有定向肖像和风景的活动。当我打开设备时,我Activity中的数据消失了。所以我在互联网上查了一下,发现一条线路放在清单中,它保存了数据并且工作正常! android:configChanges =“orientation | keyboardHidden | screenSize” 除了我所有的观点都混乱无序并且被取代了。我使用了两种不同的布局。一个用于海景,另一个用于景观。我想保持数据结束切换的布局,任何想法? 感谢名单屏幕方向更改时保留数据

+3

了解活动生命周期。为了您的需要,onSaveInstantState很重要.... https://developer.android.com/guide/components/activities/activity-lifecycle.html – Opiatefuchs

+0

不要使用'configChanges'这是处理方向改变的一种非常糟糕的方式。基本上你必须使用一个id,因此它的状态可以自动保存。如果你有变量中的数据,你可以把它们保存在'onSaveInstanteState'中,把它们放到包中并在Activity重新启动时将它们恢复到'onCreate'中。片段可以通过'setRetainInstante(true)保持状态'你可以阅读更多关于这个:[Android开发者](https://developer.android.com/guide/topics/resources/runtime-changes.html),[Codepath]( https://github.com/codepath/android_guides/wiki/Handling-Configuration-Changes) –

+1

哇!我投票得如此之快:O。好吧使用这个库很容易 https://github.com/frankiesardo/icepick –

回答

-3

只是把这个符合你Mainfest.xml文件的活动标签

android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"

最终代码会看起来像:

<activity android:name="com.xyz.myapp.MainActivity" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"/>

+0

它没有工作。它保留数据,但我也想要更改视图 – Nino

+0

在每个具有相同名称'layout/main.xml'的文件夹中为xml文件编写xml,并且为landscape更多地使用[layout-land/main.xml] [info visit this]( https://developer.android.com/training/basics/supporting-devices/screens.html) – Bharatesh

+0

我做到了,但不会改变。我认为我放在清单中的这条线保持数据并且不处理布局的切换 – Nino

0

覆盖

protected void onSaveInstanceState(Bundle outState) 

方法和outState变量的键值对

protected void onCreate(Bundle savedInstanceState) 

保存价值时方向将恰克savedInstanceState变量将有你在

onSaveInstanceState 

注意保存相同的值:当活动将首次发布

protected void onCreate(Bundle savedInstanceState) 

savedInstanc eState将具有空值