Activity之Fragment

一、Fragment生命周期

Fragment的生命周期

Fragment的生命周期和Activity的生命周期非常像,比Activity多了onAttach()、onCreateView()、onActivityCreate、onDestroyView、onDetach方法

  • onAttach方法是在和Activity建立連接的時候調(diào)用的,并返回綁定的Activity,一般可以做像this.mActivity=activity操作
  • onCreateView當Fragment加載布局時候用的
    -onActivityCreate是當托管的Activity的被創(chuàng)建的時候被調(diào)用的
  • onDetroyView銷毀視圖的時候會被調(diào)用,但是此時還未和Activity解除綁定,可通過onCreateView恢復(fù),一般是在ViewPager+Fragment的時候使用。
  • onDetach當與Activity解綁的時候使用

Fragment的生命周期是由Activity的FragmentManager的管理的并不是由系統(tǒng)管理的

推薦閱讀Fragment不為人知的細節(jié)

二、靜態(tài)加載Fragment

(1)用法簡介
  • 繼承Fragment類,可以重寫onAttach,onCreate,onCreateView等方法
  • 在Activity的布局文件中聲明自己定義的Fragment
(2)代碼示例

Fragment代碼

public class AFragment extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle saveInstanceState){
     View view=inflater.inflate(R.layout.a_fragment_layout,parent);
     return view;
    }
}

布局文件代碼

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:gravity="center|top"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment
        android:id="@+id/a_fragment"
        android:name="com.jty.myapplication25.AFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>
運行結(jié)果
靜態(tài)加載

三、動態(tài)加載

(1)用法說明
  • 繼承Fragment類,實現(xiàn)onAttach,onCreate,onCreateView等方法
  • 通過getSupportFragmentManger獲取FragmentManager對象
  • 通過LayoutManager的beginTranscation獲取FragmentTransaction對象
  • 通過FragmentTransaction對象的add方法加載Fragment,replace方法切換Fragment,需要傳進去父容器的id和Fragment的對象
    -可以通過FragmentTransaction的addToBackFragment()方法允許通過返回鍵返回上一個Fragment
  • 最后一定要調(diào)用Fragment Transaction的commit方法
(2)代碼示例

AFragment(BFragment一樣)

public class AFragment extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle saveInstanceState){
        View view=inflater.inflate(R.layout.a_fragment_layout,null);
        return view;
    }
}

Activity中的代碼

public class MainActivity extends AppCompatActivity {
    FragmentTransaction transaction;
    FragmentManager manager;
    private static final String A_FRAGMENT="1";
    private static final String B_FRAGMENT="2";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        manager=getSupportFragmentManager();

}
    public void click1(View v){
        transaction=manager.beginTransaction();
        Fragment fragment=manager.findFragmentByTag(A_FRAGMENT);
        if(fragment==null){
         fragment=new AFragment();
         transaction.replace(R.id.parent1,fragment,A_FRAGMENT);
         transaction.commit();
     }
    }
    public void click2(View v){
        transaction=manager.beginTransaction();
        Fragment fragment=manager.findFragmentByTag(B_FRAGMENT);
        if(fragment==null){
            fragment=new BFragment();
            transaction.replace(R.id.parent1,fragment,B_FRAGMENT);
            transaction.commit();
        }
    }
}
運行效果
點擊AFragment按鈕切換到AFragment

四、Fragment+ViewPager

幾篇講解:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容