场景:
步骤<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;
}
@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;
}
}
从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;
}
}