1.1 Fragment切換示例代碼
【
<FrameLayout
android:id="@+id/framelayout_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/tv1">
<!-- 稍後用於添加或替換顯示Fragment-->
</FrameLayout>
<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_above="@+id/radioGroup1"
android:layout_marginBottom="5dp"
android:background="#000000"/>
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radio0"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@null"
android:button="@null"
android:checked="true"
android:drawableTop="@drawable/slt_btn1_item"
android:gravity="center"
android:text="選項一" />。。。。
</RelativeLayout>
】
1.1.1 Replace形式
【
public class MainActivity extends Activity {
FragmentManagermanager;
RadioGrouprg;
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
/*
* 添加默認顯示的Fragment
*/
manager.beginTransaction().add(R.id.framelayout_main,new MyFragment())
.commit();
rg.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public voidonCheckedChanged(RadioGroup group, intcheckedId) {
// TODO Auto-generated method stub
switch (checkedId) {
case R.id.radio0:
manager.beginTransaction()
.replace(R.id.framelayout_main, newMyFragment())
.commit();
break;
case R.id.radio1:
manager.beginTransaction()
.replace(R.id.framelayout_main, newTwoFragment())
.commit();
break;
case R.id.radio2:
manager.beginTransaction()
.replace(R.id.framelayout_main,
new ThreeListFragment()).commit();
break;
}
}
});
}
private voidinit() {
// TODO Auto-generated method stub
manager = getFragmentManager();
rg = (RadioGroup) findViewById(R.id.radioGroup1);
}
}
拓展:回退棧的運用
// 加入Fragment回退棧的標記
transaction.replace(R.id.main,fragment1, "fragment1");
transaction.addToBackStack("fragment1");
】
1.2 Fragment之間的通訊
【
Fragment之間的通訊必須通過他們所在的Activity來實現
Fragment.getActivity():獲取Fragment所在的Activity對象
Activity.getFragmentManager().findFragmentById(int):在Activity中通過id尋找Fragment
示例:在一個Activity中有兩個Fragment碎片,現在實現從兩個碎片中相互獲取值。
transaction.add(R.id.one, fragment1, "fragment1");
transaction.add(R.id.two, fragment2, "fragment2");
transaction.commit();
碎片一中:
Fragment2 fragment2 = (Fragment2)getFragmentManager().findFragmentByTag("fragment2");
EditText editText = (EditText) fragment2.getView().findViewById(R.id.editText2);
Toast.makeText(getActivity(),"--two->>" +editText.getText().toString(), 1).show();
碎片二中:
Fragment1 fragment1 = (Fragment1) getFragmentManager().findFragmentByTag("fragment1");
EditText editText = (EditText) fragment1.getView().findViewById(R.id.editText1);
Toast.makeText(getActivity(),"--one->>"+ editText.getText().toString(), 1).show();
】
1.3 Fragment的管理
【
涉及的類
FragmentManager
每一個Activity都包含一個FragmentManager來管理它所包含的Fragment
獲取FragmentManager對象:FragmentManagerfm = getFragmentManager();
FragmentTransaction
事務:保證任務執行的完整性
FragmentTransaction可以用來在一個Activity內添加、刪除和替換Fragment
使用步驟:開啓並提交事務
1、FragmentTransactionft = fm.beginTransaction();
2、添加、刪除和替換Fragment
3、ft.commit();
添加、刪除和替換Fragment
添加Fragment
ft.add(int,Fragment)
刪除Fragment
ft.remove(Fragment)
替換Fragment
ft.replace(int,Fragment)
使用FragmentManager查找Fragment
findFragmentById(intid)
findFragmentByTag(Stringtag)
】
1.4 Fragment向下兼容
【
android.support.v4.app.Fragment
android.support.v4.app.FragmentActivity
android.support.v4.app.FragmentManager
FragmentManagerfm = getSupportFragmentManager();
android.support.v4.app.FragmentTransaction
FragmentManager fm =getSupportFragmentManager();
PS:如果在API11及以上構建的項目上使用了支持Fragment的Android支持包,請確保關於Fragment的相關引入和類引用都來自於Android支持包,雖然Android支持包和Android本地開發包中都含有Fragment的相關類,但這兩個分佈在不同包中的類是不可以互用的。
要通過Android支持包來使用Fragment,必須要保證Activity是繼承自FragmentActivity類
】
1.5 Fragment的生命週期
【
Fragment的生命週期是依賴於它所在的Activity的生命週期
Fragment生命週期圖
* 生命週期的運行特點:
* 當Fragment被添加到頁面中進行顯示時:
* 運行流程:
*onAttach--onCreate--onCreateView--onActivityCreated
* ---onStart--onResume ,直到運行onResume,Fragment纔可見可交互
*
* 當Fragment被從頁面顯示中刪除時,
* 運行流程:
*onPause--onStop--onDestoryView--onDestroy--onDetach
*
* Fragment的生命週期會收Activity的生命週期的影響,即一旦Activity退出,那麼
* Fragment也會自動退出
】
1.6 相關類
【
ListFragment
定義:帶有ListView控件的Fragment
setListAdapter(BaseAdapter):設置自帶的ListView的適配器
重寫onListItemClick()方法處理LIstView的item點擊事件
DialogFragment
定義:帶有生命週期的對話框
創建類,並繼承DialogFragment
重寫onCreateView方法,並通過setStyle()設置對話框樣式
重寫onCreateDialog()方法,並返回Dialog
在Activity中通過自定義類的對象調用show(FragmentManagerfm, String tag)
二選其一
】