我试图创建一个可以更改屏幕方向的应用程序。在屏幕方向更改时,我希望保存我的数据。我创建了具有相同名称但方向不同的布局。纵向布局是RelativeLayout。横向视图包含一个包含RelativeLayout的ScrollView布局,否则内容完全相同。
当我使用API13和+时,我在清单中使用了这一行:
android:configChanges="keyboardHidden|orientation|screenSize"
当我更改方向时,我的数据仍然存在,但ScrollView不起作用,因此我无法访问布局的底部。
如果没有manifest.xml文件中的前一行,则ScrollView可以正常工作(但不保存数据)。我试图将RelativeLayout更改为LinearLayout,因为它是SrollView中使用的最常见的布局,但它没有工作。
你有想法解决这个问题吗?
提前谢谢
答案 0 :(得分:0)
我找到了解决方案。我认为这不是最好的解决方案,我仍然不明白为什么我的问题中的代码不起作用。所以,如果你知道只是发表评论或回答。
我的解决方案是:
1)我删除了清单中的行
2)我实现了这两种方法:
@Override
protected void onSaveInstanceState(Bundle outState) {
//data to be saved
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
//retore data
}
这个解决方案有效,因为我没有很多数据可以保存和恢复。这是避免以前问题的一种方法,而不是解决问题的方法。
此外,此方法可能是一个问题,例如,如果您有一个ImageView应该在开始时被禁用,并在活动剩余的活动后启用。如果在onCreate()的开头使用setEnabled(false)方法,如果更改屏幕方向,即使之前发生更改按钮状态的事件,也会再次发生setEnabled(false)方法。因此,您希望启用按钮,但在屏幕更改后,它将被禁用。 (即使使用此解决方案,也很容易避免此问题,但它不是一个干净的代码)。