Android中Fragmeng的示例代碼

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 ,直到運行onResumeFragment纔可見可交互

     *

     * 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)

         二選其一

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