csdnActivity和Fragment之間的數(shù)據(jù)通信有兩種:Activity向Fragment中傳遞數(shù)據(jù)骏全、Fragment向Activity傳遞數(shù)據(jù)。
學(xué)習(xí)Android的同學(xué)注意了D岣=薄!
學(xué)習(xí)過(guò)程中遇到什么問(wèn)題或者想獲取學(xué)習(xí)資源的話(huà)棺棵,歡迎加入Android學(xué)習(xí)交流群楼咳,群號(hào)碼:364595326? 我們一起學(xué)Android!
同時(shí)Activity之間也能傳遞數(shù)據(jù)烛恤,F(xiàn)ragment之間又能傳遞數(shù)據(jù)母怜。本文主要是總結(jié)自己在項(xiàng)目中遇到的問(wèn)題以及解決辦法!
Activity向Fragment中傳遞數(shù)據(jù)
項(xiàng)目中遇到的問(wèn)題:項(xiàng)目采用的是一個(gè)MainActivity + 4個(gè)Fragment搭建的框架棒动,其余的小功能采用的是Activity去實(shí)現(xiàn);在實(shí)現(xiàn)個(gè)人中心(Fragment)時(shí)需要將登錄的用戶(hù)名返回給個(gè)人中心顯示在頁(yè)面上宾添。
我的實(shí)現(xiàn)方法:
通過(guò)用戶(hù)注冊(cè)時(shí)向數(shù)據(jù)庫(kù)中插入用戶(hù)信息船惨,在用戶(hù)中心判斷用戶(hù)是否存在柜裸,存在則顯示用戶(hù)名。這個(gè)方法有點(diǎn)不像Fragment向Activity傳遞數(shù)據(jù)的解決辦法粱锐。但是能實(shí)現(xiàn)我所要求的功能疙挺。(本人小白,能實(shí)現(xiàn)功能已經(jīng)高興一天了怜浅,哈哈)
網(wǎng)上的數(shù)據(jù)傳遞方法 1(鏈接):
給Fragment添加newInstance方法铐然,將需要的參數(shù)傳入,設(shè)置到bundle中恶座,然后setArguments(bundle)搀暑,最后在onCreate中進(jìn)行獲取跨琳;
注意事項(xiàng):setArguments方法必須在fragment創(chuàng)建以后自点,添加給Activity前完成。千萬(wàn)不要脉让,首先調(diào)用了add桂敛,然后設(shè)置arguments
網(wǎng)上的數(shù)據(jù)傳遞方法 2
直接在Fragment中采用getActivity.getIntent()拿到Activity中的參數(shù),故此能拿到Activity中的方法
網(wǎng)上的數(shù)據(jù)傳遞方法 3
Activity在切換Fragment的時(shí)候溅潜,通過(guò)setArguments向Fragment傳遞參數(shù)术唬,F(xiàn)ragment通過(guò)getArguments();獲得從activity中傳遞過(guò)來(lái)的值
Fragment向Activity傳遞數(shù)據(jù)
網(wǎng)上的數(shù)據(jù)傳遞方法 1(鏈接):
在Fragment中寫(xiě)一個(gè)回調(diào)接口
在Activity中實(shí)現(xiàn)這個(gè)接口
在Fragment中的onAttach方法中得到Activity中實(shí)現(xiàn)好的實(shí)例化接口對(duì)象
用接口對(duì)象進(jìn)行傳值
Activity向Activity傳遞數(shù)據(jù)
第一行代碼中寫(xiě)到:
活動(dòng)之間傳遞數(shù)據(jù)可以采用new Intent().putExtra()方法傳遞,putExtra()方法的第一個(gè)參數(shù)是鍵滚澜,第二個(gè)參數(shù)是值粗仓;在第二個(gè)Activity中g(shù)etIntent即可拿到第一個(gè)Activity傳遞過(guò)來(lái)的intent,在通過(guò)intent.get…Extra()過(guò)來(lái)方法拿到第一個(gè)Activity傳遞過(guò)來(lái)的數(shù)據(jù)博秫。
使用Bundle來(lái)傳遞數(shù)據(jù):首先創(chuàng)建一個(gè)Bundle對(duì)象潦牛,采用bundle.putExtra()方法,道理同上挡育,接著intent.putExtra(bundle)傳遞數(shù)據(jù)巴碗。在第二個(gè)Activity中g(shù)etIntent即可拿到第一個(gè)Activity傳遞過(guò)來(lái)的bundle,在通過(guò)bundle.get…Extra()過(guò)來(lái)方法拿到第一個(gè)Activity傳遞過(guò)來(lái)的數(shù)據(jù)即寒。
Activity返回?cái)?shù)據(jù)給上一個(gè)Activity
第一行代碼中如此寫(xiě)到:
在第一個(gè)Activity中啟動(dòng)第二個(gè)Activity:startActivityForResult(intent,1)//第一個(gè)參數(shù)是intent橡淆,第二個(gè)參數(shù)是請(qǐng)求碼,只要值唯一就ok
在第二個(gè)Activity中用intent攜帶數(shù)據(jù)母赵,然后setResult(RESULR_OK,intent)逸爵;將數(shù)據(jù)返回,最后finish();關(guān)閉當(dāng)前Activity(切記一定要關(guān)閉當(dāng)前Activity)
在第一個(gè)Activity中重寫(xiě)onActivityResult( int requestCode,int resultCode,Intetnt data)方法,通過(guò)判斷requestCode來(lái)識(shí)別是哪個(gè)Activity返回的數(shù)據(jù)凹嘲,在判斷返回?cái)?shù)據(jù)的處理結(jié)果师倔,最后通過(guò)data.getStringExtra()方法拿到數(shù)據(jù)。
Fragment向Fragment傳遞數(shù)據(jù)
回顧項(xiàng)目中采用一個(gè)MainActivity + 4個(gè)Fragment搭建的框架周蹭,那么我想在其中的兩個(gè)Fragment之間有數(shù)據(jù)交互怎么解決趋艘?
第一行代碼中如此說(shuō)道:
首先在一個(gè)Fragment中拿到與之相關(guān)聯(lián)的Activity疲恢,然后通過(guò)這個(gè)Activity去獲取另一個(gè)Fragment,這樣就實(shí)現(xiàn)了Fargment與Fragment之間的通信
網(wǎng)上的說(shuō)法(鏈接):
在Fragment2中瓷胧,新建一個(gè)函數(shù):newInstance(String text)來(lái)接收傳過(guò)來(lái)的參數(shù)
然后在Fragment2的OnCreateView的時(shí)候再?gòu)腶rguments中獲取參數(shù)
在Fragment1中显拳,在調(diào)起Fragmen2t時(shí),通過(guò)調(diào)用newInstance函數(shù)來(lái)獲取實(shí)例并傳遞參數(shù)
Fragment2返回?cái)?shù)據(jù)給ragment1
采用回調(diào)方法實(shí)現(xiàn)[直接看第三部分](鏈接)
數(shù)據(jù)傳遞出去:
可以采用intent搓萧,或者bundle傳遞出去
可以采用新建一個(gè)setValue方法將數(shù)據(jù)傳遞出去
采用回調(diào)方法實(shí)現(xiàn)數(shù)據(jù)傳遞
數(shù)據(jù)傳遞回來(lái):
采用接口回調(diào)方式
因此接口回調(diào)方法很重要杂数,一點(diǎn)要掌握!瘸洛!