fragment 生命周期
fragment原理,和Activity的区别:
fragment ->由FragmentManger来进行管理(布局管理器)->生命周期由程序员来进行控制
activity->由android 内部进行控制->生命周期由android 本身进行控制
Fragment管理与Fragment事务
![](https://img.haomeiwen.com/i15332870/2a826381eea90c02.png)
Fragment与Activity交互
![](https://img.haomeiwen.com/i15332870/66572a6c43110439.png)
1.onAttach():执行该方法时,Fragment与Activity已经完成绑定
2.onCreate():初始化Fragment。可通过参数savedInstanceState获取之前保存的值。
3.onCreateView():初始化Fragment的布局,不建议执行耗时的操作,比如读取数据库数据列表。
4.onActivityCreated():执行该方法时,与Fragment绑定的Activity的onCreate方法已经执行完成并返回,在该方法内可以进行与Activity交互的UI操作,所以在该方法之前Activity的onCreate方法并未执行完成,如果提前进行交互操作,会引发空指针异常。
5.onStart():执行该方法时,Fragment由不可见变为可见状态
6.onResume():执行该方法时,Fragment处于活动状态,用户可与之交互。
7.onPause():执行该方法时,Fragment处于暂停状态,但依然可见,用户不能与之交互。
8.onStop():执行该方法时,Fragment完全不可见。
9.onDestroyView():销毁与Fragment有关的视图,但未与Activity解除绑定,依然可以通过onCreateView方法重新创建视图。通常在ViewPager+Fragment的方式下会调用此方法。
10.onDestroy():销毁Fragment。通常按Back键退出或者Fragment被回收时调用此方法。
11.onDetach():解除与Activity的绑定。在onDestroy方法之后调用。
![](https://img.haomeiwen.com/i6433394/2905902a1331235f.png)
![](https://img.haomeiwen.com/i16989497/8a092ceac469d614.png)
流程:
Fragment创建:setUserVisibleHint()->onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume();
Fragment变为不可见状态(锁屏、回到桌面、被Activity完全覆盖):onPause()->onSaveInstanceState()->onStop();
Fragment变为部分可见状态(打开Dialog样式的Activity):onPause()->onSaveInstanceState();
Fragment由不可见变为活动状态:onStart()->OnResume();
Fragment由部分可见变为活动状态:onResume();
Activity进入Fragment时:onAttach->onCreate->onCreateView->onActivityCreated->onStart->onResume
Activity退出Fragment时:onPause->onStop->onDestoryView->onDestory->onDetach
实例:Activity切换Fragment
MainActivity.java:
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final BlankFragment fragment = new BlankFragment();
Button button = findViewById(R.id.bu1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fragmentManager=getSupportFragmentManager();//获取
android.support.v4.app.FragmentTransaction transaction=fragmentManager.beginTransaction();
transaction.add(R.id.linear,fragment);
transaction.addToBackStack(null);
transaction.commit();
}
});
}
}
Activity的布局文件:
<Button
android:id="@+id/bu1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:id="@+id/linear"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
BlankFragment
public class BlankFragment extends Fragment {
public static final String TAG="BlankFragment";
@Override
public void onAttach(Context context) {
super.onAttach(context);
Log.d(TAG, "onAttach: ");
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate: ");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d(TAG, "onCreateView: ");
// Inflate the layout for this fragment
View view= inflater.inflate(R.layout.fragment_blank, container, false);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.d(TAG, "onActivityCreated: ");
}
@Override
public void onStart() {
super.onStart();
Log.d(TAG, "onStart: ");
}
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume: ");
}
@Override
public void onPause() {
super.onPause();
Log.d(TAG, "onPause: ");
}
@Override
public void onStop() {
super.onStop();
Log.d(TAG, "onStop: ");
}
@Override
public void onDestroyView() {
super.onDestroyView();
Log.d(TAG, "onDestroyView: ");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy: ");
}
@Override
public void onDetach() {
super.onDetach();
Log.d(TAG, "onDetach: ");
}
}
fragment 布局:
<TextView
android:text="fragment "
android:textSize="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />