Обработка нескольких вкладок в альбомной и портретной ориентации в Android

Я указал разные макеты для альбомной и портретной ориентации, используя layout и layout-land, в моем приложении есть несколько вкладок. Каждый раз при переходе с книжной на альбомную или с альбомной на портретную экран переходит на 1-ю вкладку, даже выбранная вкладка отличается. Как мы можем решить эту проблему.


person Ajay Soman    schedule 30.01.2013    source источник
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
comment
Пробовал это. У меня есть исключение. java.lang.RuntimeException: невозможно запустить активность ComponentInfo() java.lang.IllegalStateException: setSelectedNavigationIndex недействителен для текущего режима навигации - person Ajay Soman; 30.01.2013
comment
Используете ли вы вкладки на панели действий? Вы, очевидно, замените это тем, что вы используете для вкладок. - person Jason Robinson; 30.01.2013

когда вы измените ориентацию, он перезагрузит Activity. Вот почему он дает 1-ю вкладку. Используйте в своем файле манифеста android: configChanges = "keyboardHidden | ориентация", если он не будет работать нормально, тогда перейдите к @Override public void onSaveInstanceState (Bundle saveInstanceState) {}

person user1897519    schedule 30.01.2013