Fragment关于压栈的知识

这里说一下关于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


---代码
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


---代码片段

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关于压栈的知识)