四大组件

fragment 生命周期

2019-10-22  本文已影响0人  琳媚儿

fragment原理,和Activity的区别:

fragment ->由FragmentManger来进行管理(布局管理器)->生命周期由程序员来进行控制

activity->由android 内部进行控制->生命周期由android 本身进行控制

Fragment管理与Fragment事务

97188171.png

Fragment与Activity交互

45971686.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方法之后调用。

image image

流程:

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" />
上一篇 下一篇

猜你喜欢

热点阅读