1

目前我正在更新我的应用程序资金是我遇到以下问题的时间。我想支持横向和纵向,所以我创建了两种不同的布局。

我的第一个问题是,旋转后应用程序重新启动并且设置的数字被刷新。

在 stackoverflow 上找到这个问题后,这很容易解决。

我已经针对该问题实施了以下解决方案:

@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处理两种不同的布局。

4

2 回答 2

3

听起来您需要实现onSaveInstanceStateonRestoreInstanceState

于 2011-06-13T18:55:44.600 回答
2

setContentView改变方向时您不需要打电话。如果您在正确的布局目录下保存具有相同名称的布局,Android 将为您执行此操作。例如:

res/layout-land/main.xml
res/layout-port/main.xml

当您的 Activity 切换方向时,Android 将加载正确的布局。

于 2011-06-13T18:52:09.883 回答