csdnActivity和Fragment之間的數據通信有兩種:Activity向Fragment中傳遞數據、Fragment向Activity傳遞數據。
學習Android的同學注意了!!!
學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Android學習交流群,群號碼:364595326? 我們一起學Android!
同時Activity之間也能傳遞數據,Fragment之間又能傳遞數據。本文主要是總結自己在項目中遇到的問題以及解決辦法!
項目中遇到的問題:項目采用的是一個MainActivity + 4個Fragment搭建的框架,其余的小功能采用的是Activity去實現;在實現個人中心(Fragment)時需要將登錄的用戶名返回給個人中心顯示在頁面上。
我的實現方法:
通過用戶注冊時向數據庫中插入用戶信息,在用戶中心判斷用戶是否存在,存在則顯示用戶名。這個方法有點不像Fragment向Activity傳遞數據的解決辦法。但是能實現我所要求的功能。(本人小白,能實現功能已經高興一天了,哈哈)
網上的數據傳遞方法 1(鏈接):
給Fragment添加newInstance方法,將需要的參數傳入,設置到bundle中,然后setArguments(bundle),最后在onCreate中進行獲取;
注意事項:setArguments方法必須在fragment創建以后,添加給Activity前完成。千萬不要,首先調用了add,然后設置arguments
網上的數據傳遞方法 2
直接在Fragment中采用getActivity.getIntent()拿到Activity中的參數,故此能拿到Activity中的方法
網上的數據傳遞方法 3
Activity在切換Fragment的時候,通過setArguments向Fragment傳遞參數,Fragment通過getArguments();獲得從activity中傳遞過來的值
網上的數據傳遞方法 1(鏈接):
在Fragment中寫一個回調接口
在Activity中實現這個接口
在Fragment中的onAttach方法中得到Activity中實現好的實例化接口對象
用接口對象進行傳值
第一行代碼中寫到:
活動之間傳遞數據可以采用new Intent().putExtra()方法傳遞,putExtra()方法的第一個參數是鍵,第二個參數是值;在第二個Activity中getIntent即可拿到第一個Activity傳遞過來的intent,在通過intent.get…Extra()過來方法拿到第一個Activity傳遞過來的數據。
使用Bundle來傳遞數據:首先創建一個Bundle對象,采用bundle.putExtra()方法,道理同上,接著intent.putExtra(bundle)傳遞數據。在第二個Activity中getIntent即可拿到第一個Activity傳遞過來的bundle,在通過bundle.get…Extra()過來方法拿到第一個Activity傳遞過來的數據。
第一行代碼中如此寫到:
在第一個Activity中啟動第二個Activity:startActivityForResult(intent,1)//第一個參數是intent,第二個參數是請求碼,只要值唯一就ok
在第二個Activity中用intent攜帶數據,然后setResult(RESULR_OK,intent);將數據返回,最后finish();關閉當前Activity(切記一定要關閉當前Activity)
在第一個Activity中重寫onActivityResult( int requestCode,int resultCode,Intetnt data)方法,通過判斷requestCode來識別是哪個Activity返回的數據,在判斷返回數據的處理結果,最后通過data.getStringExtra()方法拿到數據。
回顧項目中采用一個MainActivity + 4個Fragment搭建的框架,那么我想在其中的兩個Fragment之間有數據交互怎么解決?
第一行代碼中如此說道:
首先在一個Fragment中拿到與之相關聯的Activity,然后通過這個Activity去獲取另一個Fragment,這樣就實現了Fargment與Fragment之間的通信
網上的說法(鏈接):
在Fragment2中,新建一個函數:newInstance(String text)來接收傳過來的參數
然后在Fragment2的OnCreateView的時候再從arguments中獲取參數
在Fragment1中,在調起Fragmen2t時,通過調用newInstance函數來獲取實例并傳遞參數
采用回調方法實現[直接看第三部分](鏈接)
數據傳遞出去:
可以采用intent,或者bundle傳遞出去
可以采用新建一個setValue方法將數據傳遞出去
采用回調方法實現數據傳遞
數據傳遞回來:
采用接口回調方式
因此接口回調方法很重要,一點要掌握!!