• android 管理fragment


    要管理fragment们,需使用FragmentManager,要获取它,需在activity中调用方法getFragmentManager()。
    你可以用FragmentManager来做以上事情:
    1使用方法findFragmentById()或findFragmentByTag(),获取activity中已存在的fragment们。
    2使用方法popBackStack()从activity的后退栈中弹出fragment们(这可以模拟后退键引发的动作)。
    3用方法addOnBackStackChangedListerner()注册一个侦听器以监视后退栈的变化。
    更多关于以上方法的信息,请参考“FragmentManager”文档。
    就像前面章节所演示的,你还可以使用FragmentManager打开一个FragmentTransaction来执行fragment的事务,比如添加或删除fragment。

    执行Fragment的事务

    在 activity中使用fragment的一个伟大的好处是能跟据用户的输入对fragment进行添加、删除、替换以及执行其它动作的能力。你提交的一 组fragment的变化叫做一个事务。事务通过FragmentTransaction来执行。你还可以把每个事务保存在activity的后退栈中, 这样就可以让用户在fragment变化之间导航(跟在activity之间导航一样)。
    你可以通过FragmentManager来取得FragmentTransaction的实例,如下:
    1. FragmentManagerfragmentManager=getFragmentManager();
    2. FragmentTransactionfragmentTransaction=fragmentManager.beginTransaction();
    一个事务是在同一时刻执行的一组动作(很像数据库中的事务)。你可以用add(),remove(),replace()等方法构成事务,最后使用commit()方法提交事务。
    在调用commint()之前,你可以用addToBackStack()把事务添加到一个后退栈中,这个后退栈属于所在的activity。有了它,就可以在用户按下返回键时,返回到fragment们执行事务之前的状态。
    如下例:演示了如何用一个fragment代替另一个fragment,同时在后退栈中保存被代替的fragment的状态。
    1. //Create new fragment and transaction
    2. FragmentnewFragment=newExampleFragment();
    3. FragmentTransactiontransaction=getFragmentManager().beginTransaction();

    4. //Replace whatever is in the fragment_container view with thisfragment,
    5. //and add the transaction to the backstack
    6. transaction.replace(R.id.fragment_container,newFragment);
    7. transaction.addToBackStack(null);

    8. //Commit the transaction
    9. transaction.commit();
    解 释:newFragment代替了控件IDR.id.fragment_container所指向的ViewGroup中所含的任何fragment。然 后调用addToBackStack(),此时被代替的fragment就被放入后退栈中,于是当用户按下返回键时,事务发生回溯,原先的 fragment又回来了。
    如果你向事务添加了多个动作,比如多次调用了add(),remove()等之后又调用了addToBackStack()方法,那么所有的在commit()之前调用的方法都被作为一个事务。当用户按返回键时,所有的动作都被反向执行(事务回溯)。
    事务中动作的执行顺序可随意,但要注意以下两点:
    1你必须最后调用commit()。
    2如果你添加了多个fragment,那么它们的显示顺序跟添加顺序一至(后显示的覆盖前面的)。
    如果你在执行的事务中有删除fragment的动作,而且没有调用addToBackStack(),那么当事务提交时,那些被删除的fragment就被销毁了。反之,那些fragment就不会被销毁,而是处于停止状态。当用户返回时,它们会被恢复。
    密技:对于fragment事务,你可以应用动画。在commit()之前调用setTransition()就行。――一般银我不告诉他哦。
    但 是,调用commit()后,事务并不会马上执行。它会在activity的UI线程(其实就是主线程)中等待直到线程能执行的时候才执行(废话)。如果 必要,你可以在UI线程中调用executePendingTransactions()方法来立即执行事务。但一般不需这样做,除非有其它线程在等待事 务的执行。
    警告:你只能在activity处于可保存状态的状态时,比如running 中,onPause()方法和onStop()方法中提交事务,否则会引发异常。这是因为fragment的状态会丢失。如果要在可能丢失状态的情况下提 交事务,请使用commitAllowingStateLoss()。
  • 相关阅读:
    蚂蚁金服井贤栋:用技术联手金融机构,形成服务小微的生态合力
    蚂蚁金服 Service Mesh 渐进式迁移方案|Service Mesh Meetup 实录
    蚂蚁金服“定损宝”现身AI顶级会议NeurIPS
    报名 | 蚂蚁金服ATEC科技大会 · 上海:数字金融新原力
    前沿 | 中国中小银行都是如何展开数字化转型的?
    盘点:2018年双11背后的蚂蚁核心技术
    构筑敏捷能力中心,打造下一代数字银行“操作系统”!
    客户故事:4家银行如何打造新一代移动金融中心
    干货 | 金融级互联网产品持续交付的挑战与应对
    性能跃升50%!解密自主研发的金融级分布式关系数据库OceanBase 2.0
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/3254472.html
Copyright © 2020-2023  润新知