目前,我正在研究我的应用程序money is time的更新,如果遇到以下问题。我想支持横向和纵向方向,因此我创建了两种不同的布局。
我的第一个问题是旋转后,应用程序重新启动,并刷新了设置的编号。
在stackoverflow上找到this question之后,此问题很容易解决。
对于该问题,我已经实现了以下解决方案:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setGui();
}
我已经用以下代码对其进行了测试,其中车轮的布局根据布局进行了调整。再次一切都应该工作。当我改变方向时,数字不会改变。
public void setGui() {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
initWheel(R.id.money1, 0, 9, "%1d", moneyWidthPortrait, textSizePortrait);
...
} else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
initWheel(R.id.money1, 0, 9, "%1d", moneyWidthLandscape, textSizeLandscape);
...
}
}
但是我还想更改背景和布局(填充和边距),因此我添加了以下两行:
public void setGui() {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
setContentView(portrait);
...
} else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
setContentView(landscape);
...
}
}
但是,在调用setContentView之后,所有数据似乎都再次丢失,并且在更改手机方向后滚轮会重置为零。
最好避免在方向和布局更改期间将轮子重置为“ 0”?
编辑:答案后编辑
我删除了:
android:configChanges="keyboardHidden|orientation"
并添加:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putInt("WheelMoney1", getWheelValue(R.id.money1));
...
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
getWheel(R.id.money1).setCurrentItem(savedInstanceState.getInt("WheelMoney1"), false);
...
}
并实现了
layout-land
和layout-port
来处理两种不同的布局。 最佳答案