В настоящее время я работаю над обновлением моего приложения деньги - время , где я столкнулся со следующей проблемой. Я хотел бы поддержать альбомную и портретную ориентацию, поэтому я создал два разных макета.
Моя первая проблема состояла в том, что после поворота приложение перезапустилось, и номер был указан там, где он был сброшен.
Это было легко исправить после нахождения этого вопроса здесь на 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-land
и layout-port
для обработки двух разных макетов.