Я указал разные макеты для альбомной и портретной ориентации, используя layout и layout-land, в моем приложении есть несколько вкладок. Каждый раз при переходе с книжной на альбомную или с альбомной на портретную экран переходит на 1-ю вкладку, даже выбранная вкладка отличается. Как мы можем решить эту проблему.
Обработка нескольких вкладок в альбомной и портретной ориентации в Android
comment
Если вы переопределяете метод изменения ориентации, вы можете установить активную вкладку. Не уверен, что это действительно хорошее исправление, поэтому просто комментарий. Предполагая, что вы используете горизонтальные и вертикальные макеты и метод по умолчанию
- person Gjordis   schedule 30.01.2013
comment
Вы можете сохранить порядок активной вкладки в статической переменной. Затем, после инициализации всего вашего макета, также раздуйте элемент управления вкладками. Вы можете получить это статическое значение данных и установить активную вкладку.
- person toantran   schedule 30.01.2013
Ответы (3)
Вы можете использовать onRetainNonConfigurationInstance() для решения этой проблемы.
public void onCreate(Bundle savedInstanceState)
{
....
lastTab = (Integer) getLastNonConfigurationInstance();
.....
if(lastTab != null)
{
tabs.setCurrentTab(lastTab);
}
}
public Object onRetainNonConfigurationInstance()
{
return tabs.getCurrentTab();
}
person
diva
schedule
20.02.2013
Поворот устройства по умолчанию уничтожит и воссоздаст вашу активность. Вам нужно сохранить состояние выбранной вкладки и восстановить его при запуске новой Activity.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// onCreate implementation goes here
if(savedInstanceState != null) {
int selectedTabIndex = savedInstanceState.getInt("selectedTabIndex");
getActionBar().setSelectedNavigationItem(selectedTabIndex);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("selectedTabIndex", getActionBar().getSelectedNavigationIndex());
}
person
Jason Robinson
schedule
30.01.2013
Пробовал это. У меня есть исключение. java.lang.RuntimeException: невозможно запустить активность ComponentInfo() java.lang.IllegalStateException: setSelectedNavigationIndex недействителен для текущего режима навигации
- person Ajay Soman; 30.01.2013
Используете ли вы вкладки на панели действий? Вы, очевидно, замените это тем, что вы используете для вкладок.
- person Jason Robinson; 30.01.2013
когда вы измените ориентацию, он перезагрузит Activity. Вот почему он дает 1-ю вкладку. Используйте в своем файле манифеста android: configChanges = "keyboardHidden | ориентация", если он не будет работать нормально, тогда перейдите к @Override public void onSaveInstanceState (Bundle saveInstanceState) {}
person
user1897519
schedule
30.01.2013