我对我的活动有25个edittexts
和其他视图。我在layout
和layout-land
中创建了不同的main.xml
文件,因此相应的UI将根据切换模式显示(纵向或横向)。
但在edittexts
中填充值后,如果我从纵向更改为横向,则之前的值将丢失。因此,我的疑问是,即使在将更改为其他模式后,如何从edittexts
获取值,并恢复各自edittexts
的值。
当然,我知道当我们切换模式时,活动会被重新创建,这会导致数据丢失。我甚至在开发人员指南中修改了Handling Runtime changes
,但作为一个新手,我无法清楚地理解像onRetainNonConfigurationInstance()
这样在返回对象时保存数据的方法,但在我的应用程序中,即使在切换后,我也需要在edittexts
中输入的数字在各自的edittexts
上。
我提到了很多问题,比如链接等,甚至在stackoverflow上,但我无法找到解决问题的方法。请对此提出解决方案。
就连我也有另一个问题。我有一个dialog
,它在activity
第一次启动时弹出,我不希望在切换模式时也出现在popup
中。请为这两个问题提出解决方案。如果有人需要代码片段进行更多澄清,请告诉我。我将用代码编辑我的问题。
如果数据较少,可以使用onSavedInstanceState
和onRestoreInstanceState
进行保存和获取。。有关详细信息,请访问此链接保存数据
但如果你有大量的数据,那么我必须说,你不应该允许方向的改变,你可以通过在清单文件中添加以下行来限制它:
android:configChanges="orientation|keyboardHidden"
上面的线固定了方向,但在这种情况下,你的layout-land
将不起作用,但你可以在onConfigurationChanged()
方法中动态处理或重新定位你的视图
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
align_landscape(); // align your view dynamically here for landscape
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
align_portrait(); // align your view dynamically here for portrait
}
}
您可以在方向更改时存储编辑文本值,然后切换到新布局并分配保存的值。
通过在清单中指定以下条件,可以检测方向更改。
android:configChanges="orientation"
在onConfigurationChanged()方法中,存储各个字段的值,然后可以使用setRequestedOrientation(int requestedOrientation)
方法更改方向,该方法将更新到您的自定义布局,然后恢复字段的值。