FragmentTransaction几个函数的比较

来源:互联网 发布:ip和端口查询 编辑:程序博客网 时间:2024/05/17 03:31

FragmentTransactiontransaction = fm.benginTransatcion();//开启一个事务

transaction.add() 

Activity中添加一个Fragment

transaction.remove()

Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈(回退栈后面会详细说),这个Fragment实例将会被销毁。

transaction.replace()

使用另一个Fragment替换当前的,实际上就是remove()然后add()的合体~

transaction.hide()

隐藏当前的Fragment,仅仅是设为不可见,并不会销毁

transaction.show()

显示之前隐藏的Fragment

detach()

将此FragmentActivity中分离,会销毁其布局,但不会销毁该实例

attach()

将从Activity中分离的Fragment,重新关联到该Activity,重新创建其视图层次

transatcion.commit()//提交一个事务

如果你在FragmentA中的EditText填了一些数据,当切换到FragmentB时,如果希望会到A还能看到数据,则适合你的就是hideshow;也就是说,希望保留用户操作的面板,你可以使用hideshow,因为这样用户之前的操作仍然存在

如果你希望用户的操作不存在了,那你可以使用remove(),然后add();或者使用replace(),replace这个和remove,add是相同的效果。

ps : removedetach有一点细微的区别,在不考虑回退栈的情况下,remove会销毁整个Fragment实例,而detach则只是销毁其视图结构,实例并不会被销毁。那么二者怎么取舍使用呢?如果你的当前Activity一直存在,那么在不希望保留用户操作的时候,你可以优先使用detach


0 0
原创粉丝点击