1. 程式人生 > >使用fragment巢狀FragmentTabHost實現篩選切換框架

使用fragment巢狀FragmentTabHost實現篩選切換框架

想要實現一個效果篩選切換的導航頁,著實費了翻腦筋,大概腦子鬆弦了,請教了不少同事,最後還是用自己鬆弦的大腦想出來了,不多說了,看圖:


思路一:用的FragmentTabHost新增兩個fragmentA,fragmentB,點選商品切換,移除fragmentA,fragmentB,載入fragmentC,fragmentD.
mTabHost.removeAllViews();
mTabHost.clearAllTabs();
mTabHost.setup(this, getSupportFragmentManager(), R.id.frame_content);
int pageCount = fragmentList.length;
for (int i = 0; i < pageCount; ++i) {
TabHost.TabSpec spec = mTabHost.newTabSpec(getString(tabCommodityInfoList[i])).setIndicator(getString(tabCommodityInfoList[i]));
mTabHost.addTab(spec, fragmentList[i], null);
}
 mTabHost.setCurrentTab(0);

若不加mTabHost.clearAllTabs();會出現一個問題,我點選商品切換時,當前選中頁會沒有資料,也就是load more會不出現。

思路二:

2個fragment巢狀FragmentTabHost.

========================================================================================

接下來又遇到新的問題,分類頁有一個GridView,要求實現點選分類控制gridview顯示隱藏,如下圖:

  

不熟悉API,輾轉了2天。

難點(水平較高者可不看):

1.獲取FragmentTabHost裡的Fragment中的控制元件:

開始想的是通過mTabHost物件獲取,但是好像獲取不到,只好通過getSupportFragmentManager().findFragmentByTag(tag)的方式獲取Fragment物件。

呼叫前需要先呼叫boolean isOk = getSupportFragmentManager().executePendingTransactions();

返回值isOk在onTabChanged裡是true,在mTabHost.getTabWidget().getChildAt(1).setOnClickListener裡是false,我沒深究,直接沒判斷,可以實現功能即可。

2.控制GridView的顯示隱藏,我是在Fragment類裡寫了一個方法用來記錄狀態,再通過mTabHost設定。

另外:歡迎各位猿友前來評論指教~~