五月就這樣過去了。
月末上點乾貨。
乾貨當然是沒人分享過的東東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());
}