Android fragment 內部嵌套tabhost組件

五月就這樣過去了。

月末上點乾貨。

乾貨當然是沒人分享過的東東O(∩_∩)O~

Android fragment組件的推出是爲了替代tabhost組件的。

但有時候由於項目需要,我們需要在fragment內部嵌套tabhost。

fragment是一個可以左滑右滑以及點擊切換的組件,而tabhost只能點擊切換。

這樣的話,從view的touch分發事件角度來看,fragment內部嵌套tabhost是可行的。


目前網絡可以搜到的方案是:

onCreateView() 方法裏是 TabHost 的主要部分,獲取TabHost的方法是先用 LayoutInflater抽象類獲取佈局對象,然後用佈局對象獲取TabHost,因爲不是繼承Activity,所以不能直接用getViewById()。
最後tabHost.setup()。

但這樣還是會有問題,tab佈局出來了,但是對應的內容不顯示。


實現這一效果的關鍵在於LocalActivityManager管理類。

但要使用該方法,頁面必須繼承ActivityGroup。

Fragment不屬於ActivityGroup,但它可以通過getActivity()獲取嵌套它的Activity。

於是,

localActivityManager = new LocalActivityManager(getActivity(), true);
		localActivityManager.dispatchCreate(savedInstanceState);
		tabHost.setup(localActivityManager);

關於LocalActivityManager的詳細介紹,可以參考blog : http://blog.csdn.net/caowenbin/article/details/5876019


好了,別忘了在其他生命週期執行下相關操作:

	@Override
	public void onResume() {
		super.onResume();
		localActivityManager.dispatchResume();
	}

	@Override
	public void onPause() {
		super.onPause();
		localActivityManager.dispatchPause(getActivity().isFinishing());
	}


最終效果圖:




說再多也沒有源碼來的實在:

源碼地址:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章