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
總結
以上是生活随笔為你收集整理的Fragment 与DialogFragment 相互之间传递数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 如何快速定位当前页面是哪
- 下一篇: 从fragment开始向上查找实现了某个