如何获取FragmentTabHost中指定标签页的Fragment
使用FragmentTabHost構建了包含幾個標簽頁的界面,如何獲取指定標簽頁的Fragment?
How to get Fragment in FragmentTabHost?
TabHost中Fragment的Tag
一般通過FragmentTabHost.addTab(TabSpec tabSpec, Class<?> clss, Bundle args)方法添加fragment:
TabSpec tabSpec = mTabHost.newTabSpec("TAB_TAG_" + i).setIndicator("TAB_TITLE_" + i); mTabHost.addTab(tabSpec, MyFragment.class, null);而方法TabHost.TabSpec newTabSpec(String tag)的參數tag就是fragment的tag.
那么,我們有2種方法獲取fragment。
通過Fragment.getTag()獲取Fragment
最開始采用了這種辦法,首先獲取fragment manager管理的fragment列表,然后根據tag從列表中查找fragment:
private Fragment getFragment(int tabId) {List<Fragment> fragments = getSupportFragmentManager().getFragments();for(Fragment fragment : fragments) {String str1 = fragment.getTag();String str2 = String.valueOf("TAB_TAG_" + tabId);if(str1 != null && str1.equals(str2)) // 最開始沒有檢查str1是否為空,導致crash!return fragment;}return null; }然后掉進坑里了!
因為拿到的fragment列表,不僅僅是TabHost包含的fragment,還包含向attached activity添加的其它fragment,而如果這些fragment并未設置tag,那么fragment.getTag()將返回null,然后就crash了。
通過FragmentManager.findFragmentByTag(String tag)獲取Fragment
感覺這個方法最簡潔。
private Fragment getFragment(int tabId) {return getSupportFragmentManager().findFragmentByTag("TAB_TAG_" + tabId); }在onTabChanged()中獲取的fragment有時為空
打印了一些log發現,
如果第1次切換到某個標簽頁,在onTabChanged()方法中立刻調用findFragmentByTag()時,返回的總是null,但如果延遲一段時間,就一定可以獲取fragment.
如果再次切換到某個標簽頁,在onTabChanged()中不需要延時,總可以返回fragment.
LogCat輸出:
// cannot get the selected fragment immediately if the fragment has never been instantiated. onTabChanged(): 1, fragment null onTabChanged() delay 50ms: 1, fragment HistoryFragment{6f7a9d5 #2 id=0x7f09006e 1} onTabChanged(): 2, fragment null onTabChanged() delay 50ms: 2, fragment HistoryFragment{10c59e72 #3 id=0x7f09006e 2}// can get the selected fragment immediately if the fragment already instantiated. onTabChanged(): 1, fragment HistoryFragment{6f7a9d5 #2 id=0x7f09006e 1} onTabChanged(): 2, fragment HistoryFragment{10c59e72 #3 id=0x7f09006e 2}How to get current selected Fragment in FragmentTabHost
版權聲明:《如何獲取FragmentTabHost中指定標簽頁的Fragment?》由 WeiYi.Li 在 2015年10月12日寫作。著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
文章鏈接:http://li2.me/2015/10/how-to-get-specifi...
總結
以上是生活随笔為你收集整理的如何获取FragmentTabHost中指定标签页的Fragment的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NSString和SwiftString
- 下一篇: linux学习笔记——grub故障排除