目前,我正在研究我的应用程序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-landlayout-port来处理两种不同的布局。

最佳答案

听起来您需要实现onSaveInstanceStateonRestoreInstanceState

08-17 11:03