吐槽框架
苦逼的我以前本身用了一個堆棧來管理多個Fragment的跳轉,寫得我想吐。如今才發現一切原來那麼簡單,哎,面壁去。。。。函數
摘要this
對Fragment的add、remove以及replace操做中,都是經過FragmentTransaction的事務來操做的。你能夠在beginTransaction以後spa
執行一系列Fragment的操做,而在提交以前,若是你使用了 addToBackStack 函數,則能夠將本次事務操做保存在堆棧中。從而使當你按了code
後退按鈕時它能夠還原事務的操做使得界面返回到本次事務以前的狀態。 效果至關於返回前一個Activity。blog
本文實現了選項卡框架的多層跳轉及返回實現。事務
正文rem
在你的FragmentActivity(我所使用的類名爲 MainTabHost )中加入如下函數,此函數能夠實現指定選項卡對應界面的跳轉。get
/** * 替換指定標籤頁中的Fragment * @param containerViewID 進行替換的標籤頁ID * @param frag * @param tag 標籤 * @param addToBackStack 是否添加到堆棧中 */ public void replaceTabView(int containerViewID, Fragment frag, String tag, boolean addToBackStack){ FragmentManager fm = this.getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.replace(containerViewID, frag, tag); if(addToBackStack){ ft.addToBackStack(null); } ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); }
而在實際使用中,咱們常常是要切換當前選項卡中的視圖,好比你在新聞標籤頁中的列表點擊一條新聞進入詳細頁面。因此添加如下替換當前界面的函數供使用會方便不少it
(其中mTabHost是你的TabHost 實例):
/** * 替換當前選項卡頁界面 */ public void replaceCurrentTab(Fragment frag, String tag){ replaceTabView(mTabHost.getCurrentView().getId(), frag, tag, true); }
我模擬的時候是經過在一個Fragment中加入一個跳轉按鈕,當點擊的時候跳轉到第二個Fragment中去。 我這裏經過FirstPageFragment
跳轉到 SecondFloorFragment 中去。
public void changeToSecondFloorFragment(){ MainTabHost host = (MainTabHost)this.getActivity(); //轉換成本身的Activity host.replaceCurrentTab(new SecondFloorFragment(), "second"); }
好了,經過添加以上代碼,在FirstPageFragment能夠跳轉到SecondFloorFragment中去,而當你按返回鍵的時候,能夠返回到FirstPageFragment之中。