当前位置: 首页 > news >正文

上哪儿找做网站/网址大全名称

上哪儿找做网站,网址大全名称,中国建筑人才招聘,百度网站建设中的自由容器2019独角兽企业重金招聘Python工程师标准>>> Fragment和Activity的交互 一个Fragment的实例总是和包含它的Activity直接相关。 fragment可以通过getActivity() 方法来获得Activity的实例,然后就可以调用一些例如findViewById()之类的方法。 如&#xff1…

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Fragment和Activity的交互

  一个Fragment的实例总是和包含它的Activity直接相关。

  fragment可以通过getActivity() 方法来获得Activity的实例,然后就可以调用一些例如findViewById()之类的方法。

  如:

  View listView = getActivity().findViewById(R.id.list);

  但是注意调用getActivity()时,fragment必须和activity关联(attached to an activity),否则将会返回一个null。

 

  相似的,activity也可以获得一个fragment的引用,从而调用fragment中的方法。

  获得fragment的引用要用FragmentManager,之后可以调用findFragmentById() 或者 findFragmentByTag().

  比如:

  ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);

 

创建事件回调

  一些情况下,可能需要fragment和activity共享事件,一个比较好的做法是在fragment里面定义一个回调接口,然后要求宿主activity实现它。

  当activity通过这个接口接收到一个回调,它可以同布局中的其他fragment分享这个信息。

  例如,一个新闻显示应用在一个activity中有两个fragment,一个fragment A显示文章题目的列表,一个fragment B显示文章。

  所以当一个文章被选择的时候,fragment A必须通知activity,然后activity通知fragment B,让它显示这篇文章。

  这个情况下,在fragment A中声明一个这样的接口OnArticleSelectedListener:

复制代码

public static class FragmentA extends ListFragment {...    // Container Activity must implement this interfacepublic interface OnArticleSelectedListener {        public void onArticleSelected(Uri articleUri);}...
}

复制代码

 

  之后包含这个fragment的activity实现这个OnArticleSelectedListener接口,用覆写的onArticleSelected()方法将fragment A中发生的事通知fragment B。

  为了确保宿主activity实现这个接口,fragment A的onAttach() 方法(这个方法在fragment 被加入到activity中时由系统调用)中通过将传入的activity强制类型转换,实例化一个OnArticleSelectedListener对象:

复制代码

public static class FragmentA extends ListFragment {OnArticleSelectedListener mListener;...@Override    public void onAttach(Activity activity) {        super.onAttach(activity);        try {mListener = (OnArticleSelectedListener) activity;} catch (ClassCastException e) {            throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");}}...
}

复制代码

 

  如果activity没有实现这个接口,fragment将会抛出ClassCastException异常,如果成功了,mListener将会是activity实现OnArticleSelectedListener接口的一个引用,所以通过调用OnArticleSelectedListener接口的方法,fragment A可以和activity共享事件。

  比如,如果fragment A是ListFragment的子类,每一次用户点击一个列表项目,系统调用fragment中的onListItemClick() 方法,在这个方法中可以调用onArticleSelected()方法与activity共享事件。

复制代码

public static class FragmentA extends ListFragment {OnArticleSelectedListener mListener;...@Override    public void onListItemClick(ListView l, View v, int position, long id) {        // Append the clicked item's row ID with the content provider UriUri noteUri = ContentUris.withAppendedId(ArticleColumns.CONTENT_URI, id);        // Send the event and Uri to the host activity        mListener.onArticleSelected(noteUri);}...
}

复制代码

 

 

处理Fragment的生命周期

三种停留状态

  管理fragment的生命周期和管理activity的生命周期类似,和activity一样,fragment可以在三种状态下停留:

  Resumed

  fragment在running的activity中可见。

  Paused

  另一个activity在前景运行,并且享有焦点,但是这个fragment所在的activity仍然可见(前景activity部分遮挡或者是半透明的)。

  Stopped

  fragment不可见。可能是因为宿主activity处于stopped状态,或者fragment被remove掉,然后加在了back stack中。

  一个处于stopped状态的activity还是存活状态的,所有的状态和成员信息会被系统保持。但是,它不再被用户可见,并且如果宿主activity被kill掉,它也会被kill掉。

 

数据存储和恢复

  和Activity类似,可以用Bundle类对象保存fragment的状态,当activity的进程被kill之后,需要重建activity时,可以用于恢复fragment的状态。

  存储时利用onSaveInstanceState()回调函数,恢复时是在 onCreate()onCreateView(), 或者onActivityCreated()里。

 

Back Stack

  activity和fragment生命周期最重要的不同之处是它们如何存储在各自的back stack中。

  Activity停止时,是存在一个由系统维护的back stack中,但是当fragment停止(被remove)时,需要程序员显示地调用addToBackStack() ,并且fragment是存在一个由宿主activity掌管的back stack中。

 

Fragment和Activity的生命周期

  宿主activity的声明周期直接影响到fragment的生命周期,比如activity生命周期的回调函数调用时,所有在其中的fragment的相同的回调函数会同时被调用。

  Fragment还有一些额外的生命周期回调函数:

onAttach()

  当fragment和activity被关联时调用。

onCreateView()

  当创建fragment的UI被初始化时调用。

onActivityCreated()

  当activity的onCreate()方法返回时调用。

onDestroyView()

  当fragment的UI被移除的时候调用。

onDetach()

  当fragment和activity去关联时调用。

如图:

 

 

 

  从这个图上可以看出activity的状态决定了fragment可能接收到的回调函数

  比如说,当activity接收到它的onCreate()回调函数,那么这个activity中的fragment最多接收到了onActivityCreated()。

  当activity处于Resumed状态时,可以自由地添加和移除fragment,也即是说,只有activity在Resumed状态时,fragment的状态可以独立改变

  但是,当activity离开Resumed状态,fragment的生命周期被activity控制。

 

 

参考资料

  API Guides: Fragments

  http://developer.android.com/guide/components/fragments.html

 


转载于:https://my.oschina.net/u/1777508/blog/314681

http://www.lbrq.cn/news/1063711.html

相关文章:

  • 网站建设需要企业提供哪些素材/seo推广怎么收费
  • 莱芜金点子信息港电子版/百度 seo优化作用
  • 网站内页做友链/今日小说百度搜索风云榜
  • 专做电器的网站/技术短期培训班
  • 杭州公司做网站/百度网盘帐号登录入口
  • 网站开发学什么编程语言/seo优化什么意思
  • Wordpress屏蔽模仿站爬虫ip/高端网站建设企业
  • 高端网站制作网站建设/seo国外英文论坛
  • 甘肃网络公司网站建设/深圳seo优化服务商
  • 做网站用什么软件编辑/seo全网推广
  • 网站建设有哪几个方面/谷歌广告联盟怎么做
  • 图片代码如何做网站/站长之家
  • 做静态网站接单/百度下载免费官方安装
  • 上海网络推广外包公司/做seo网页价格
  • 帮别人做网站服务器/seo排名优化seo
  • 环江建设网站/公司域名注册查询
  • 山东省建设厅继续教育网站/关键词排名优化软件价格
  • 网站开发部门结构/企业在线培训系统
  • 网站建设 收费明细/百度竞价推广价格
  • 做淘宝那样的网站要多少钱/谷歌账号注册入口官网
  • 广州网站建设定制/正规电商培训学校排名
  • 长沙做旅游网站多少钱/网站seo优化报告
  • 网站翻页动画效果/阿里巴巴运营
  • 代码命名 网站/淘宝店铺转让价格表
  • asp网站设置/网络运营是做什么的工作
  • 合肥专业做网站的公司/域名备案
  • php企业网站的毕业论文/自动seo优化
  • 网站开发的技术方案/搜索引擎yandex入口
  • 淘宝客采集网站建设/关键词排名优化公司推荐
  • nas做网站要哪些东东/百度收录规则
  • 配置Mybatis环境
  • Nginx vs Spring Cloud Gateway:限流功能深度对比与实践指南
  • 13015计算机系统原理-速记宝典
  • 案例介绍|JSON数据格式的转换|pyecharts模块简介
  • 从零开始学Express,理解服务器,路由于中间件
  • 【超分辨率专题】PiSA-SR:单步Diff超分新突破,即快又好,还能在线调参