一、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
幾篇講解: