android之Fragment

Android Fragment

好久沒寫博客了,本來打算是一週寫一遍總結的,但是計劃永遠趕不上變化,前兩週還在學習ndk開發,本週就被公司安排又來開始做android界面的開發了。今天就把我這一週來用到的一個知識點,Fragment和大家分享一下。

 

1、Fragment允許將Activity拆分成過關完全獨立封裝的可重用組件,每一組件都有他自己的生命週期和ui佈局。我先描述一下我要做的東西,就是在Activity的主界面,做一個界面切換的佈局,如圖

 

 

這是我們的效果圖,點擊下面的各個選項,界面可以相互切換,要實現這個功能,可以有很多種方法,如利用viewPager控件,viewpager控件可以實現左右切換,但是下面的這些選項(動態,首頁。。。)等等就不太容易佈局了。也可以單獨爲沒有選項做一個Activity,但是那樣切換的時候,資源消耗過大不說,也容易出現界面切換太明顯的效果,所以我就考慮用Fragment了。

2、Fragment最大的優點就是讓你可以靈活動態的處理界面問題,你可以根據需要,隨意對Fragment進行添加,刪除,和替換,我的這個項目,主要是用了替換。

3、創建一個新的Fragment,可以通過基礎Fragment類來創建一個新的Fragment,在android框架內編程,這都是固定模式了。大多數情況下,需要爲Fragment分配一個ui這就需要重寫onCrateView方法來填充並返回需要的view層次。

 

這是我的動態FragmentonCreatView方法,一般在返回佈局前,需要對佈局進行初始化,就像在ActivityonCreate方法裏面做的事一樣。這裏面也會涉及到Fragment的生命週期,其實和Activity也差不多,這裏就不多說了。

 

 

4、要對Fragment進行控制,就要有管理Fragment的類,在這裏,android給我們提供了一個FragmentManager類,可以通過ActivitygetFragmentManager()方法來的得到這個FragmentManager的對象。而這個FragmentManager就提供了添加,刪除,替換Fragment的方法。

5、爲Activity添加Fragment最簡單的方式是在佈局文件中直接使用Fragment標籤來包含你之前新建的Fragment類就ok了。如圖

 

當然,在我的項目中我是用了另外一種方式,就是在佈局文件中先放一個Fragment的容器,先佔一個位置,然後在代碼中更具需要,隨意添加,替換那都是你的事。在佈局中的代碼如圖:

 

這個容器做好了,那就可以在代碼中控制他了。

6、添加,刪除,替換,都用同一個模式就ok了。首先要通過FragmentManager對象得到一個Fragment事務,即FragmentTransaction的對象,通過FragmentTransaction對象,就可以進行添加,刪除,替換了。代碼如下。

// 開啓事務

mFragmentTransaction = mFragmentManager.beginTransaction();

 

// 添加首頁Fragment

mFragmentTransaction.add(R.id.main_ui_container_framelayoutmDynamicFragment);

 

// 替換Fragment

mFragmentTransaction.replace(R.id.main_ui_container_framelayout,mDynamicFragment);

 

//刪除Fragment

mFragmentTransaction.remove(mDynamicFragment);

 

// 提交事務

mFragmentTransaction.commit();

最後一點要記得提交事務。

7、如果你是在Activity的佈局文件中直接使用Fragment標籤來添加的Fragment,那你就可以再Activity中使用FindFragmentByID這個方法來通過Fragment的資源id來找到這個Fragment,但是,如果你在Activity的佈局文件中使用的是佈局容器,那就只能用findFragmentByTag()這個方法了。這一點主要一下。

8、Fragmentback棧。Fragment能夠創建動態的Activity佈局,這些佈局可以被修改是ui發生重大的變化,在某些情況下,這些改變可以視爲一個新的屏幕,在這樣的情況下,用戶可能會理所當然的期望按下back按鍵,程序會退回到上一個界面,那android也提供了這樣的技術,你只有在commit方法之前,調用FragmentTransactionaddToBackStack()方法,那你commit之後到了新的界面,然後按下back按鍵,程序就回到了你上一個界面。

比如。

// 開啓事務

mFragmentTransaction = mFragmentManager.beginTransaction();

 

// 替換Fragment

mFragmentTransaction.replace(R.id.main_ui_container_framelayout,mDynamicFragment);

 

// 添加回退棧

mFragmentTransaction.addToBackStack("");

 

// 提交事務

mFragmentTransaction.commit();

 

假如你是用現在的mDynamicFragment代替了之前的Fragment1,那有了addToBackStack方法,當你在mDynamicFragment界面的時候,你按下back按鈕,那程序就回到了Fragment1界面了。

 

呵呵,至此,Fragment就算是講完了,如果有什麼不明白的,加我qq,大家在一起相互討論吧。

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