android Fragment(Android官方文档中文版),三年Android开发

之前的例子展示了对UI的支持, 如何将一个fragment添加到activity.  然而, 也可以使用fragment来为activity提供后台行为而不用展现额外的UI.

要添加一个无UI的fragment, 需要从activity使用 add(Fragment, String) 来添加 fragment (为fragment提供一个唯一的字符串"tag", 而不是一个view ID).这么做添加了fragment, 但因为它没有关联到一个activity layout中的一个view, 所以不会接收到onCreateView()调用. 因此不必实现此方法.

为fragment提供一个字符串tag并不是专门针对无UI的fragment的 – 也可以提供字符串tag给有UI的fragment – 但是如果fragment没有UI,那么这个tag是仅有的标识它的途径. 如果随后你想从activity获取这个fragment, 需要使用 findFragmentByTag().

管理Fragment


要在activity中管理fragment, 需要使用FragmentManager.  通过调用activity的getFragmentManager()取得它的实例.

可以通过FragmentManager做一些事情, 包括:

  • 使用findFragmentById() (用于在activity layout中提供一个UI的fragment)或findFragmentByTag() (适用于有或没有UI的fragment)获取activity中存在的fragment

  • 将fragment从后台堆栈中弹出, 使用 popBackStack() (模拟用户按下BACK 命令).

  • 使用addOnBackStackChangeListener()注册一个监听后台堆栈变化的listener.

处理Fragment事务


关于在activity中使用fragment的很强的一个特性是: 根据用户的交互情况,对fragment进行添加,移除,替换,以及执行其他动作.提交给activity的每一套变化被称为一个事务, 可以使用在 FragmentTransaction 中的 API 处理.我们也可以保存每一个事务到一个activity管理的back stack,允许用户经由fragment的变化往回导航(类似于通过activity往后导航).

从 FragmentManager 获得一个FragmentTransaction的实例 :

FragmentManager fragmentManager = getFragmentManager();

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

每一个事务都是同时要执行的一套变化.可以在一个给定的事务中设置你想执行的所有变化,使用诸如 add(), remove(), 和 replace().然后, 要给activity应用事务, 必须调用 commit().

在调用commit()之前, 你可能想调用 addToBackStack(),将事务添加到一个fragment事务的back stack.  这个back stack由activity管理, 并允许用户通过按下 BACK 按键返回到前一个fragment状态.

举个例子, 这里是如何将一个fragment替换为另一个, 并在后台堆栈中保留之前的状态:

// Create new fragment and transaction  Fragment newFragment = new ExampleFragment();  FragmentTransaction transaction = getFragmentManager().beginTransaction();  // Replace whatever is in the fragment_container view with th

  • 13
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值