6执行fragment操作/事物


在你的activity中使用fragments的一个很大的特点就是 能够进行,add, remove, replace,等操作,来作为对 用户交互的 响应。你提交的对activity的每组改变都叫做一个transaction(事物). 你也可以保存每个事物到一个被一个具体activity管理的back stack, 允许用户能够对fragment进行向后操作,就是从现在的这个fragment回到之前的那个fragment.


从FragmentManager中获得一个FragmentTransaction 的实例:

FragmentManager fragmentManager = getFragmentManager();

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();


每一个事物 都是你想要在同一时间进行操作的一组变化。操作有:add(),remove(),replace(),使用commit()来将这个事物应用到某个特定的activity


在你调用commit()之前,你也可以调用addToBackStack()来将这个事物增加到 fragment事物的back stack中,这个back stack 被activity所管理,允许用户通过 按 返回 按钮 返回之前的fragment状态,


下面这个例子,展示了 如何 用一个fragment来替换另一个fragment, 并且将之前的状态保存到back stack:

// Create new fragment and transaction

Fragment newFragment = new ExampleFragment();

FragmentTransaction transaction = getFragmentManager().beginTransaction();


// Replace whatever is in the fragment_container view with this fragment,

// and add the transaction to the back stack

transaction.replace(R.id.fragment_container, newFragment);

transaction.addToBackStack(null);


// Commit the transaction

transaction.commit();


如果你要增加多个改变到同一个事物中,然后调用在事物中调用addToBackStack(),所有的改变在你调用commit()之前都增加到了back stack中, 并且这些所有的变化是作为一个事物加进去的,所以,你一按返回按钮,所有的动作一起返回。


在FragmentTransaction中操作增加的顺序无关紧要,但是:

1 你必须最后调用commit()

2 如果你在同一个container里面增加了多个fragment, 你增加他们的书讯会决定他们在view 结构中出现的顺序


当你执行一个事物的时候,移除了一个fragment 而且 你之后没有调用addToBackStack(),当这个事物被提交的时候,这个fragment就背毁掉了,用户就不能再导航回到这个fragment,。


对每一个fragment 事物,你都可以使用是一个过渡动画,(在你commit()之前调用setTransition())


调用commit()并没有立即执行事物,而是将他排队到activity的UI线程里面(这个主线程),只要这个线程能够做这个事物,这个事物就会被立即执行。 如果你想要立即执行这个事物,可以从你的UI线程调用executePendingTransactions()。这个操作没有必要,除非,这个事物是依靠其他的线程的工作。


commit()操作要在 activity保存他的状态之前操作,否则 就会出错。这时因为如果activity需要恢复,commit()之后的那些状态会丢失,对那些 可以丢失的commit,可以使用commitAllowingStateLoss()



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值