日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Fragment 与DialogFragment 相互之间传递数据

發布時間:2024/4/15 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Fragment 与DialogFragment 相互之间传递数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

場景:

步驟<1>在FragmentA 中觸發顯示DialogFragmentB,并傳遞參數數據mA2B給DialogFragmentB,在DialogFragmentB獲取該參數--mA2B。

步驟<2>在DialogFragmentB中對傳遞的參數mA2B進行一些處理得到結果mB2A,最后點擊“完成”,需要將mB2A回傳給FragmentA中。

步驟<1><2>中的數據傳遞如何完成呢?


步驟<1>數據傳遞方法如下:

該步驟的中的數據傳遞與獲取方式與一般的Fragment數據傳遞獲取方式一樣,就是利用Fragment的setArguments(Bundle bundle)方法進行數據傳遞(將需要傳遞的數據保存在Bundler對象中即可),利用Fragment的getArguments()來獲取Bundle,從中取出數據即可。

從FragmentA中傳遞mA2B到DialogFragmentB:利用DialogFragmentB的setArguments()方法傳遞數據mA2B(將mA2B保存到Bundle對象中);

在DialogFragmentB獲取mA2B: 在DialogFragmentB的onCreate()方法中調用getArguments(),獲取Bundle對象,從中取出mA2B即可;

(1)在FragmentA中啟動DialogFragmentB的代碼如下:

DialogFragmentB fragmentB = DialogFragmentB.newInstance(mA2B); fragmentB.setTargetFragment(FragmentA.this, FRAGMNET_A_2_FRAGMENT_B_REQUEST_CODE); fragmentB.show(getChildFragmentManager(),DIALOG_FRAGMNET_B_TAG);

(2)DialogFragmentB的newInstance()方法如下:

public static DialogFragmentB newInstance(A2B a2b) { DialogFragmentB fragmentB = new DialogFragmentB(); Bundle bundle = new Bundle(); bundle.putSerializable(ARGUMENTS_A_2_B_KEY,a2b); filterFragment.setArguments(bundle); return fragmentB; }
(3) 在DialogFragmentB 的onCreate()方法獲取mA2B,如下 :

@Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle bundle = getArguments(); if (bundle != null) { Object a2bObj = bundle.getSerializable(ARGUMENTS_A_2_B_KEY); mA2B = a2bObj instanceof A2B ? (A2B) tagInfoObj : null; } }
步驟<2>數據傳遞方法如下:

從DialogFragmentB中傳遞mB2A數據到FragmentA中,這里主要是利用DialogFragmentB的getTargetFrament().onActivityResult()方法。

(1)在DialogFragmentB中設置mB2A數據,以傳遞給FragmentA

if (getTargetFragment() != null) { Intent resultIntent = new Intent(); resultIntent.putExtra(ARGUMENTS_B_2_A_KEY,mB2A); getTargetFragment().onActivityResult(DialogFragmentB.FRAGMNET_A_2_Fragment_B_REQUEST_CODE, Activity.RESULT_OK, resultIntent); }(2)在FragmentA的onActivityResult的方法中獲取到mB2A

@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case FRAGMNET_A_2_FRAGMENT_B_REQUEST_CODE: if (resultCode == Activity.RESULT_OK && data != null) {//獲取從DialogFragmentB中傳遞的mB2ABundle bundle = data.getExtras(); if (bundle != null) { Object object = bundle.get(DialogFragmentB.ARGUMENTS_B_2_A_KEY); if (object instanceof B2A) { mB2A = (B2A) object; //to do other operation //to do xxxxxx } } } break; default: break; } }



總結

以上是生活随笔為你收集整理的Fragment 与DialogFragment 相互之间传递数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。