IT培训机构|91免费精品视频|专注编程培训|91免费精品|软件开发培训_91免费国产视频_华清远见教育

當前位置:首頁 > 學習資源 > 講師博文 > Fragment與activity間的通信

Fragment與activity間的通信 時間:2018-10-28      來源:華清遠見

上次介紹了Fragment的使用,本文主要介紹Fragment與所屬Activity之間的通信以及生命周期

1.3.1 activity向Fragment傳遞數據

Fragment與所屬的activity之間怎么進行數據的傳遞呢?

下面我們我們在主活動中再添加一個EditText和一個Button按鈕,在Fragment03中添加一個TextView,當我們在點擊這個按鈕后,把EditText中的數據顯示到Fragment03中的TextView,這就實現了activity向Fragment中傳遞數據。代碼如下:

android :id ="@+id/ et_main "

android : layout_width =" match_parent "

android : layout_height =" wrap_content "/>

android : layout_width =" wrap_content "

android : layout_height =" wrap_content "

android : text傳遞=""

android : onClick =" click4 "/>

這里我們在activity main.xml中添加EditText和Button,并為Button設置了點擊屬性

public void click4 ( View v) {

EditText et_main = ( EditText ) findViewById (R.id. et_main );

String text = et_main . getText (). toString ();

fg3. settext ( text );

}

上面我們在主活動中添加按鈕點擊方法,按鈕點擊后先獲得EditText中的內容,在拿到Fragment03的對象fg3,然后調用settext的方法,這個方法是Fragment03類的一個方法,在這個方法中設置TextView的內容。代碼如下:

public class Fragment03 extends Fragment {

private TextView tv;

@Override

public View onCreateView ( LayoutInflater inflater , ViewGroup container ,

Bundle savedInstanceState ) {

// TODO Auto - generated method stub

View v = inflater . inflate (R. layout . fragment03 , null );

tv = ( TextView ) v. findViewById (R.id.tv );

return v;

}

public void settext ( String text ) {

tv. setText ( text );

}

}

我們在EditText中輸入Hello,點擊傳遞按鈕后,就會在Fragment03中顯示Hello,如下圖:

 

 

這樣就實現了activity向Fragment傳遞數據。

1.3.2 Fragment向activity傳遞數據

下面我們再在Fragment01中創建一個EditText和Button,當我們點擊按鈕后,就會把EditText中的數據傳遞到活動中EditText中并顯示,代碼如下:

android :id ="@+id/ et_frag "

android : layout_width =" wrap_content "

android : layout_height =" wrap_content "/>

android :id ="@+id/bt"

android : layout_width =" wrap_content "

android : layout_height =" wrap_content "

android : text傳遞=""/ >

接著我們要在主活動MainActivity中定義一個方法,用于顯示主活動EditText中的數據

public void settext ( String text ) {

EditText et_main = ( EditText ) findViewById (R.id. et_main );

et_main . setText ( text );

}

那么我們到底怎么樣把數據從Fragment01中傳入到主活動中呢?我們通過調用getActivity獲得與這個Fargment相關聯的活動,然后調用活動的settext的方法顯示數據。代碼如下:

public View onCreateView ( LayoutInflater inflater , ViewGroup container ,

Bundle savedInstanceState ) {

View v = inflater . inflate (R. layout . fragment01 , null );

Button bt = ( Button ) v. findViewById (R.id.bt );

et_frag = ( EditText ) v. findViewById (R.id. et_frag );

bt. setOnClickListener (new OnClickListener () {

@Override

public void onClick ( View v) {

// TODO Auto - generated method stub

String text = et_frag . getText (). toString ();

(( MainActivity ) getActivity ()). settext ( text );

}

});

return v;

}

如圖,當我們在Fragment01的EditText中輸入World,點擊傳遞按鈕后,World就會顯示到主活動的EditText中

 

 

- 這樣我們就實現Fragment01向Activity傳遞數據。

1.4 Fragment的生命周期

和活動一樣,Fragment也有自己的生命周期,并且它和活動的生命周期基本上一樣。

Fragment類提供了一系列的回調方法,其中活動中有的回調方法,碎片中幾乎都有,不過碎片還提供一些附加的回調方法

1. onAttach()

當碎片和活動建立關聯的時候調用。

2. onCreateView()

為碎片創建視圖(加載布局)時調用。

3. onActivityCreated()

確保與碎片相關聯的活動一定已經創建完畢的時候調用。

4. onDestroyView()

當與碎片關聯的視圖被移除的時候調用。

5. onDetach()

當碎片和活動解除關聯的時候調用。

Fragment完整的生命周期如下

 

 

下面我們通過例子實踐一下,這里我們使用的是前面Fragment簡單使用的案例,代碼如

下:

public class RightFragment extends Fragment {

public static final String TAG = " RightFragment ";

@Override

public void onAttach ( Activity activity ) {

super . onAttach ( activity );

Log.d(TAG , " onAttach ");

}

@Override

public void onCreate ( Bundle savedInstanceState ) {

super . onCreate ( savedInstanceState );

Log.d(TAG , " onCreate ");

}

@Override

public View onCreateView ( LayoutInflater inflater , ViewGroup container ,

Bundle savedInstanceState ) {

Log.d(TAG , " onCreateView ");

View view = inflater . inflate (R. layout . right_fragment , container , false );

return view ;

}

@Override

public void onActivityCreated ( Bundle savedInstanceState ) {

super . onActivityCreated ( savedInstanceState );

Log.d(TAG , " onActivityCreated ");

}

@Override

public void onStart () {

super . onStart ();

Log.d(TAG , " onStart ");

}

@Override

public void onResume () {

super . onResume ();

Log.d(TAG , " onResume ");

}

@Override

public void onPause () {

super . onPause ();

Log.d(TAG , " onPause ");

}

@Override

public void onStop () {

super . onStop ();

Log.d(TAG , " onStop ");

}

@Override

public void onDestroyView () {

super . onDestroyView ();

Log.d(TAG , " onDestroyView ");

}

@Override

public void onDestroy () {

super . onDestroy ();

Log.d(TAG , " onDestroy ");

}

@Override

public void onDetach () {

-

super . onDetach ();

Log.d(TAG , " onDetach ");

}

}

重新運行程序,打印信息如下:

 

 

可以看到,當RightFragment第一次被加載到屏幕上時,會依次執行onAttach()、onCreate()、onCreateView()、onActivityCreated()法。

然后點擊LeftFragment中的按鈕,此時打印如下:

 

 

由于AnotherRightFragment替換了RightFragment,此時的RightFragment進入了停止狀態,因此onPause()、onStop()和onDestroyView()方法會得到執行。當然如果在替換的時候沒有調用addToBackStack()方法,此時的RightFragment就會進入銷毀狀態,onDestroy()和onDetach()方

法就會得到執行。

接著按下Back鍵,RightFragment會重新回到屏幕,打印信息如下:

 

 

由于RightFragment重新回

到了運行狀態,因此onActivityCreated()、onStart()和onResume()方法會得到執行。注意

此時onCreate()和onCreateView()方法并不會執行,因為我們借助了addToBackStack()方法

使得RightFragment和它的視圖并沒有銷毀。

再次按下Back鍵退出程序,打印信息如下:

 

 

依次會執行onPause()、onStop()、onDestroyView()、onDestroy()和onDetach()方法,終

將活動和碎片一起銷毀。這樣碎片完整的生命周期你也體驗了一遍,是不是理解得更加深刻了?

上一篇:長安.ARM體系結構.七日談

下一篇:SOAP嵌入式linux下的應用(一)

戳我查看嵌入式每月就業風云榜

點我了解華清遠見高校學霸學習秘籍

猜你關心企業是如何評價華清學員的

干貨分享
相關新聞
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2024 北京華清遠見科技發展有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 噪声治理,消声器,隔声屏障,隔声罩,噪声控制,降噪,空调降噪,水泵噪声治理,冷却塔噪声治理-北京华清恒业环保设备有限公司 | 兰州物流公司_兰州货运公司_兰州物流电话上门取货_兰州立辉物流公司 | 汽车轴承|圆锥滚子轴承|轴承生产厂家|赛襄轴承 | 土石_泥石分离机_无轴滚筒筛_振动筛 - 巩义市鑫利重工机械制造有限公司 | 净化塔_喷淋塔_脱硫塔_河北宝飞华创玻璃钢制造有限公司-河北宝飞华创玻璃钢制造有限公司 | 庭院大门,铝艺大门厂家,别墅庭院大门「免费设计」汉兰达庭院门厂家 | 上海译擎金属材料有限公司| 柱状_椰壳_蜂窝_果壳_粉状活性炭_活性炭厂家 - 銮桦净化 | 山西洗煤设备_山西洗煤机_山西离心机-山西东鑫昶机械科技股份有限公司 | 友联智能|RFID应用服务供应商|专注RFID行业解决方案|RFID数据采集-助力行业数字化转型 | 绝缘油介电强度测试仪|d33压电测试仪|准静态d33压电测量仪厂家直销-上海蓝巢电气有限公司【官网】 | 阻垢剂|缓蚀剂|杀菌剂|分散剂|水处理剂|印染助剂|水处理药剂|造纸助剂|膜阻垢剂|缓蚀剂|HEDP|ATMP|螯合剂-山东凯瑞化学有限公司 水处理药剂生产厂家 | 深圳万和制药有限公司_消化领域专业公司 万和香港(集团)成员 深圳同步带轮_东莞齿轮加工_东莞同步轮厂家-东莞东城精胜机械配件厂 | 重庆木门_重庆木门十大品牌_重庆套装门_重庆烤漆门_重庆套装门十大品牌_重庆木门一线品牌_重庆川田木门 | 萍乡赣西肿瘤医院|萍乡赣西肿瘤医院--官网-萍乡赣西肿瘤医院 | 西安墓园-山水殡葬服务-提供免费墓地咨询服务 | 同步分流马达_液压泵维修_派克多路阀-济南富诚液压设备有限公司 通用变频器|国产变频器|深圳变频器厂家-深圳市英捷思技术有限公司 | 天之水网_新时代主流门户网站 十大文明网,主流新媒 、 值得信赖、关注我、温暖你! | 临沂网站建设,临沂网站制作,临沂网络公司,临沂小程序开发,临沂网站设计,沂水网站建设,沂南网站建设,蒙阴网站建设,平邑网站建设,费县网站建设,兰陵网站建设,郯城网站建设,临沭网站建设,莒南网站建设,兰山网络公司 | 中华收藏网-中藏网-藏品拍卖|字画拍卖|艺术品拍卖|古玩城|收藏资讯|古玩交易|书画定制 | 性激素6项实验检测,放射免疫实验检测,明胶酶谱试剂盒,科研用人血清,质控标品,试剂盒-南京信帆生物技术有限公司 | 小型环境空气质量连续监测系统-烟气排放连续监测仪(碳排放)-青岛明德环保仪器有限公司 | 思达测试|山东思达高科机械设备有限公司 | 消防栓保温罩,玻璃钢灭火器箱,玻璃钢消防沙箱-潍坊辰阳玻璃钢有限公司 | 项目可行性研究报告_稳评能评节能报告_节能报告收费标准-智汇中经(上海)管理咨询有限公司 | 中华收藏网-中藏网-藏品拍卖|字画拍卖|艺术品拍卖|古玩城|收藏资讯|古玩交易|书画定制 | 手持电能质量测量仪-TD-1168多功能高空接线钳-上海妙定电气有限公司 | 杀菌剂_除藻剂_杀菌灭藻剂_1227杀菌剂_中北精细化工 | 智慧环保大数据云平台_车载走航式扬尘/恶臭/噪声污染源在线监测管控信息系统平台_环保土壤/环境监测系统云平台-奥斯恩智能科技 | 模具|晒纹-咬花-拉丝纹-立体纹-东莞市佳毅激光科技有限公司 | 洁衣库·U袋洗_网上洗衣店_网上干洗 | 辽宁闻天香食品有限公司 | 交通标志牌-交通标牌-铝圆牌-铝三角片-铝滑槽-公路警示指示牌-方牌-高速道路反光牌毛坯-交通设施安全警示标识牌-路名指示限速限高牌-厂家加工交通标牌铝板半成品毛坯-上海吕盟铝业有限公司 | 立式/卧式/潜水/液下/螺杆/耐磨/渣浆泵|泥浆泵|离心泵,厂家 - 河北聚盛泵业制造有限公司 | 扬州市检测仪器科技有限公司 | 一体式电磁流量计_分体式电磁流量计_卫生级电磁流量计_卫生型电磁流量计_电池供电电磁流量计_卡箍式电磁流量计_废水电磁流量计_德克森仪表(淮安)有限公司官网 | 形创(CREAFORM)3D扫描仪|三维检测|三维数字化处理|3D设备租赁|3D打印|——北京中显恒业仪器仪表有限公司 | 郑州阳光房|封阳台|钢结构【河南郑州如意阳光房门窗有限公司】 | 气体报警器,有毒气体报警器,可燃气体探测器,乙炔气体报警器,可燃气体检漏仪,便携式气体检测仪,气体报警控制器-山东如特安防设备有限公司 | 屋顶式恒温恒湿机,新风管道除湿机|上海众有实业百科 | 河间市天一密封材料有限公司-回转窑密封设备,除尘过滤袋 |