2天前我發佈了一個問題:New layouts in TabHost。所以我決定創建帶有片段而不是tabActivity的選項卡。所以現在我有3個選項卡:tab_clients,tab_settings,tab_logut。當我運行我的應用程序tab1顯示,如果我旋轉我的設備一切工作正常。當我旋轉我的設備時,從這些選項卡切換到tab2或tab3時,我感到意外,我得到了tab1的視圖。這是我的主要容器:改變方向時片段消失
公共類AplicacionActivity擴展FragmentActivity {
/* Tab identif */
static String TAB_clientes = "Clientes";
static String TAB_settings = "Settings";
static String TAB_logout = "Logout";
TabHost mTabHost;
ClientesActivity fragmentClientes;
SettingsActivity fragmentSettings;
LogoutActivity fragmentLogout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_aplicacion);
fragmentClientes = new ClientesActivity();
fragmentSettings = new SettingsActivity();
fragmentLogout = new LogoutActivity();
mTabHost = (TabHost)findViewById(android.R.id.tabhost);
mTabHost.setOnTabChangedListener(listener);
mTabHost.setup();
iniTab();
}
public void iniTab() {
Resources res = getResources();
//TabHost.TabSpec: A tab has a tab indicator, content, and a tag that is used to keep track of it.
TabHost.TabSpec spec = mTabHost.newTabSpec(TAB_clientes);
mTabHost.setCurrentTab(-3);
//TabHost.TabContentFactory: Makes the content of a tab when it is selected.
spec.setContent(new TabHost.TabContentFactory() {
public View createTabContent(String tag) {
return findViewById(android.R.id.tabcontent);
}
});
spec.setIndicator(" Clientes ", res.getDrawable(R.drawable.clientes));
mTabHost.addTab(spec);
spec = mTabHost.newTabSpec(TAB_settings);
spec.setContent(new TabHost.TabContentFactory() {
public View createTabContent(String tag) {
return findViewById(android.R.id.tabcontent);
}
});
spec.setIndicator(" Settings ",res.getDrawable(R.drawable.settings));
mTabHost.addTab(spec);
spec = mTabHost.newTabSpec(TAB_logout);
spec.setContent(new TabHost.TabContentFactory() {
public View createTabContent(String tag) {
return findViewById(android.R.id.tabcontent);
}
});
spec.setIndicator(" Logout ",res.getDrawable(R.drawable.logouticon));
mTabHost.addTab(spec);
}
/*
* TabChangeListener for change the tab when is selected
*/
TabHost.OnTabChangeListener listener = new TabHost.OnTabChangeListener() {
public void onTabChanged(String tabId) {
/*Set current tab..*/
if(tabId.equals(TAB_clientes)){
pushFragments(tabId, fragmentClientes);
}else if(tabId.equals(TAB_settings)){
pushFragments(tabId, fragmentSettings);
}else if(tabId.equals(TAB_logout)){
pushFragments(tabId, fragmentLogout);
}
}
};
/*
* insert the fragment into the FrameLayout
*/
public void pushFragments(String tag, Fragment fragment){
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.replace(android.R.id.tabcontent, fragment);
ft.commit();
}
當我點擊該按鈕我的標籤之一的內部,並更換佈局同樣的情況。當我旋轉時,我看到了tab1的視圖。我不得不說,我已經運行了使用tabActivity而不是碎片的應用程序,並且沒有這個問題。所以我在這裏有點困惑。
任何幫助將被折衷。
編輯:這個解決方案是:
1 .-創建我的FragmentActivity以下方法:
protected void onSaveInstanceState(Bundle bundle) {
super.onSaveInstanceState(bundle);
Fragment fragmentAct = this.getSupportFragmentManager().findFragmentById(android.R.id.tabcontent);
bundle.putString("fragmentAct", fragmentoActual.getTag());
Log.e("layout-saving",fragmentAct.getTag());
}
正如你可以看到我的包保存片段的標籤我在旋轉設備之前看到的
2:在我的我的FragmentActivity的onCreate方法添加以下代碼:
if (savedInstanceState != null){
String value = savedInstanceState.getString("fragmentAct");
establishLayout(value);
}
3 .-我創建一個名爲establishLayout方法:
public void establishLayout(String tagFragment){
mTabHost.setCurrentTabByTag(tagFragment);
Fragment fragmentoActual = this.getSupportFragmentManager().findFragmentByTag(tagFragment);
if(fragmentoActual!=null){
pushFragments(tagFragment, fragmentoActual);
}
}
4.-我創建方法pushFragments:
public void pushFragments(String tag, Fragment fragment){
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.replace(android.R.id.tabcontent, fragment, tag);
ft.commit();
}
就是這樣!每當我改變設備的方向時,我都不會失去活動的佈局! 非常感謝我從@Yuri獲得的幫助:)
請不要用'solved'(驗收前綴您的問題標題一個答案就足夠了)或Android。 – Luksprog 2013-05-09 04:37:12
好的,我不會再那樣做了) – kiduxa 2013-05-09 13:47:29