美文网首页四大组件
fragment 生命周期

fragment 生命周期

作者: 琳媚儿 | 来源:发表于2019-10-22 11:11 被阅读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" />
    

    相关文章

      网友评论

        本文标题:fragment 生命周期

        本文链接:https://www.haomeiwen.com/subject/uctqvctx.html