Fragment(三)

Fragment和back栈

Fragment能够创建动态的Activity布局,这些布局可以被修改来使UI发生重大的改变。在某些情况下,和谐改变可以被视为一个新的屏幕-----在这种情况下,用户可能会理所当然的期待Back返回一个布局。同样包括回滚到一个一致性的FragmentTransaction

android为该功能提供了方便的技术,想要将FragmentTransaction添加到back栈中,可以在调用commit方法之前,Fragment Transaction添加到back栈中,可以在调用commit方法之前,在FragmentTransaction中调用addToBackStack方法。

FragmentTransaction fragmentTransaction =fragmentTransaction。beginTransaction();

fragmentTransaction.add(R,id.ui_container,new MyListFragment());

Ftagment fragment =fragmentManager.finFragmentById(R.id.details_fragment);

fragmentTransaction。remove(fragment);


String tag=null;

fragmentTransaction.addToBackStack(Tag);

fragmentTransaction.commit();


当按下back按键是,之前的FragmentTransaction 将会回滚并且UI方将返回到之前的布局

当上下所述的FragmentTransaction 已经被提交,DetailsFragment就会被停止并被移动到back栈中,而不是简单的被销毁,如果Transaction回滚,ListFragment被销毁,DetailsFragment就会重新被启动



使FragmentTransaction 动起来

想要应用众多的默认过度动画中的一个,可以对任意的FragmentTransaction使用setTransition方法,并传入一个FragmentTransaction.TRANSIT_FRAGMENT_*常量:

transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);

也可以通过使用setCustomAnimations方法对FragmentTransaction应用自定义动画。这个方法接受两个动画的XML资源,一个是通过食物添加的Fragment,另外一个是被删除的Fragment

transaction.setCustomAnimations(R.animator.slide_in_left,R.animator.slide_out_right);


当在布局内替换Fragment时,这种方式对于添加无缝动态过度尤其有用。


Fragment  和Activity 之间的接口

在任何Fragment 中使用 getActivity 方法来返回它嵌入的Activity的引用。这对于查找当钱上下文,使用FragmentManager访问其他Fragment和Activity的View层次中查找View尤其有用

TextView  textView =(TextView) getActivity().findViewById(R.id.text.view);


尽管Fragment 可以直接使用主Activity 的FragmentManager 进行通信,但通畅最好考虑使用Activity来做媒介。这样会让Fragment尽可能独立和松耦合。 而Fragment的直接在于决定Fragment中的一时间如何影响主Activity的整体UI性能下降


在Fragment需要和它的主Activity共享的地方,最好在Fragment中创建一个callback接口,而主Activity必须实现它。


重写onAttach 处理程序用来获取主Activity的引用,并确保住Activity实现必要的接口


public inter face onSeasmSelectedListener{

public  void  onSeasonSelected(Season season);

}

private OnSeasonSelectedListener onSeasonSelectedListener;

  private  Season currentSeason

public    void  onAttach(Activity activity){

super.onAttach(activity);

onSeasonSelectedListener=(OnSeasonSelectedListener)activity;


private void setSeason(Season season)

{

currentSeason=season;

onSeasonSelectedListener,onSeasonSelected(season);

}

}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值