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中传递的mB2A
                    Bundle 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;  
        }  
    }




你可能感兴趣的:(Android)