現在、アプリの更新に取り組んでいます。次の問題が発生しました。横向きと縦向きをサポートしたいので、2つの異なるレイアウトを作成しました。
私の最初の問題は、ローテーション後にアプリケーションが再起動し、フラッシュされた場所に番号が設定されたことでした。
これは、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);
...
}
}
ただし、背景とレイアウト(パディングとマージン)も変更したいので、次の2行を追加しました。
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);
...
}
そして、2つの異なるレイアウトを処理するために実装layout-land
されました。layout-port