Как сохранить состояние вкладки во время ориентации в Android
У меня есть 2 вкладки, например, Tab1 & Tab2, которая отображается на экране. Пусть вкладки будут отображаться в ориентации ПОРТРЕТ.
Tab1 отображает Activity1 и Tab2 отображает Activity2.
В настоящее время выбранное состояние вкладки - Tab2. Теперь я меняю ориентацию ПОРТРЕТА на ЛАНДШАФТ. При изменении ориентации в режим LANDSCAPE вместо отображения Tab2 отображается текущий Tab1.
Мой код:
открытый класс TabBarExample расширяет TabActivity {
TabHost tabHost;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab);
/* TabHost will have Tabs */
tabHost= (TabHost)findViewById(android.R.id.tabhost);
TabSpec firstTabSpec = tabHost.newTabSpec("tid1");
TabSpec secondTabSpec = tabHost.newTabSpec("tid1");
firstTabSpec.setIndicator("First Tab Name").setContent(new Intent(this,FirstTab.class));
secondTabSpec.setIndicator("Second Tab Name").setContent(new Intent(this,SecondTab.class));
tabHost.addTab(firstTabSpec);
tabHost.addTab(secondTabSpec);
tabHost.getTabWidget().getChildAt(0).getLayoutParams().height =40;
tabHost.getTabWidget().getChildAt(1).getLayoutParams().height =40;
for(int i=0;i<tabHost.getTabWidget().getChildCount();i++)
{
tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#8A4117"));
}
Integer lastTab = (Integer) getLastNonConfigurationInstance();
if(lastTab != null) {
tabHost.setCurrentTab(lastTab);
}
tabHost.getTabWidget().getChildAt(1).setBackgroundColor(Color.parseColor("#C35817"));
}
public void onTabChanged(String tabId) {
// TODO Auto-generated method stub
for(int i=0;i<tabHost.getTabWidget().getChildCount();i++)
{
tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#8A4117"));
}
tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).setBackgroundColor(Color.parseColor("#C35817"));
}
public Object onRetainNonConfigurationInstance() {
return tabHost.getCurrentTab();
}
}
1 ответ
Решение
Проверьте этот ответ
Вы должны играть с SaveInstaceState
а также RestoreInstanceState
Смотрите этот пример