Fragment关于压栈的知识

作者: 金馆长说 | 来源:发表于2016-09-12 16:51 被阅读163次

    这里说一下关于fragment的一些压栈和出栈的知识

    fragment在我们的工作是经常用到的,简单说它就是比activity更加小巧而且灵活的一个UI组件而且具备和activity差不多的一些声明周期方法。既能在xml布局中直接引入重用,也能在我们的代码中动态的添加。fragment必须是依付activity而存在的,activity的生命周期会影响到fragment的生命周期。

    • 生命周期

    onAttach
    当Fragment和Activity发生关联是调用

    onCreateView
    创建视图

    onActivityCreated
    activity的oncreate调完后,调用。

    onDestoryView
    和OnCreate相应 Fragment视图移除后调用

    onDetach
    和onAttach对于 取消关联是调用

    除了OnCreateView以外,其他方法重新都要调用super



    1. 静态使用方法
    ---xml
    <fragment   
     android:id="@+id/fragment"
     android:name="AddFragment"   
     android:layout_width="match_parent"    
     android:layout_height="match_parent">
    
    ---代码
    public class OneFragment extends android.app.Fragment {
    
        @Override
        public void onAttach(Context context) {
            super.onAttach(context);
            Log.i("jinwei", "onAttach");
        }
    
    
        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            Log.i("jinwei", "onAttach activity");
        }
    
    
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.i("jinwei", "onCreate");
        }
    
    
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            Log.i("jinwei", "onCreateView");
            return super.onCreateView(inflater, container, savedInstanceState);
        }
    
    
        @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            Log.i("jinwei", "onActivityCreated");
        }
    
    
        @Override
        public void onStart() {
            super.onStart();
            Log.i("jinwei", "onStart");
        }
    
    
        @Override
        public void onResume() {
            super.onResume();
            Log.i("jinwei", "onResume");
        }
    
    
        @Override
        public void onPause() {
            super.onPause();
            Log.i("jinwei", "onPause");
        }
    
    
        @Override
        public void onStop() {
            super.onStop();
            Log.i("jinwei", "onStop");
        }
    
    
        @Override
        public void onDetach() {
            super.onDetach();
            Log.i("jinwei", "onDetach");
        }
    
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            Log.i("jinwei", "onDestroy");
        }
    
    
        @Override
        public void onDestroyView() {
            super.onDestroyView();
            Log.i("jinwei", "onDestroyView");
        }
    }
    
    
    
    

    2.动态使用

    ---xml
    <Fragment   
     android:id="@+id/frame_layout"
     android:layout_width="match_parent"    
     android:layout_height="match_parent">
    
    ---代码片段
    
    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.add(R.id.fragment, mOneFragment);
    transaction.commit();
    
    • 事物介绍
      如果需要动态使用fragment就需要用到getFragmentManager().beginTransaction()这个事物类。
      每次进行了操作都要获取一次事物,然后在进行提交操作。
      FragmentTransaction transaction = getFragmentManager().beginTransaction()
      transaction.commit();

      add(id,fragment)
      添加一个fragment

      reaple(id,fragment)
      替换一个事物

      remove(fragment)
      移除

      attach(fragment)
      附加一个fragment

      detach(fragment)
      移除一个fragment

      addToBackStack("")
      对事物进行加入栈处理如果add后。当退出会按顺序退出fragment。

      commitAllowingStateLoss();
      和commit()一样。不同的是commit下onSaveInstanceSate后调用commit会carsh,
      而这个方法会进行检查这种操作不会奔溃,但是onSaveInstanceSate就不会进行存储操作了。

      executePendingTransactions
      commit()后调用,来保证立即执行,变异步为同步。

      commitNow()
      将只会执行你当前要提交的transaction. 所以commitNow()避免你会不小心执行了那些你可能并不想执行的transactions.

    提交方法的参考
    具体的使用方法参考

    相关文章

      网友评论

        本文标题:Fragment关于压栈的知识

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