總領;fragment是Google推崇的ui佈局方法。他的主要目的是在所有的android設備上通用一套ui,fragment可以自適應android pad,android電腦等android設備。方便編碼一次在所有的android設備上使用。
一,使用方法
1,新建一個類,並繼承android.support.v4.app.Fragment
2,將fragment加入佈局中的方法
1),靜態方法。直接在佈局xml中引用
如上,只需要將android:name設置成自己定義的fragment即可
2),動態方法。在運行中加入fragment
(1),首先建立一個裝載fragment的容器,即FragmentLayout,如下
(2),在Activity中動態加載自定的fragment,如下
2,替換fragment,新建另一個fragment類,注意,該方法需要寫在繼承了FragmentActivity的Activity中,目的是獲得getSupportFragmentManager()方法。具體有兩種方法,如下。
1),該方法每次重新創建fragment,消耗資源
2),該方法利用之前的fragment,節約了資源,提倡使用
private void replaceFragment2(){ FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); //獲取事務 switch (isWhich){ case 1: if (headFragment==null){ headFragment=new HeadFragment(); fragmentTransaction.add(R.id.frlContainer,headFragment); } fragmentTransaction.hide(articleFragment); fragmentTransaction.show(headFragment); //替換 isWhich=isHead; break; case 2: if (articleFragment==null){ articleFragment=new ArticleFragment(); fragmentTransaction.add(R.id.frlContainer,articleFragment); } fragmentTransaction.hide(headFragment); fragmentTransaction.show(articleFragment); //替換 isWhich=isHead; break; } fragmentTransaction.commit(); //提交事務 }
3,fragment和activity通信
1),在fragment中暴露一個接口供activity使用。
2),在activity中實現該接口。
3),在fragment中獲取activity對象
4),在fragment中調用接口的方法。
在該方法中設置了button的事件監聽,當接收到點擊事件之後,會調用接口的sendData方法。而此時的接口其實是activity的引用。即這就是多態的一種表現形式。
二,問題及解決
1,
紅線報錯是因爲firstFragment繼承的是android.app.Fragment,而我們此處的add方法需要傳入android.support.v4.app.Fragment,所以修改firstFragment繼承的類即可。
三,源代碼
https://gitlab.com/MyAndroidProject/MyFragment