吐槽框架
苦逼的我以前本身用了一个堆栈来管理多个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之中。