版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/johnWcheung/article/details/81226145
传递数据
我们使用一种可靠的方式,fragment argument来创建fragment和设置data:
private static final String ARG_DATE = "date";
public static XxFragment newInstance(Date date) {
Bundle args = new Bundle();
args.putSerializable(ARG_DATE, date);
XxFragment fragment = new XxFragment();
fragment.setArguments(args);
return fragment;
}
返回数据
如果是activity的数据回传,我们可以调用startActivityForResult()方法, ActivityManager负责跟踪管理activity父子关系。回传数据后,子activity被销毁,但ActivityManager知道接收数据的是哪个activity。
类似于activity间的关联,可以通过设置目标fragment建立fragment间的关联:
public void setTargetFragment(Fragment fragment, int requestCode)
目标fragment和请求代码由FragmentManager负责跟踪管理,我们可调用fragment(设置目标fragment的fragment)的getTargetFragment()方法和getTargetRequestCode()方法获取它们。
回调目标fragment:
public static final String EXTRA_DATE = "extraDate";
private void sendResult(int resultCode, Date date) {
if (getTargetFragment() == null) {
return;
}
Intent intent = new Intent();
intent.putExtra(EXTRA, date);
getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, intent);
}
目标fragment获取数据:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != Activity.RESULT_OK) {
return;
}
if (requestCode == REQUEST_DATE) {
Date date = (Date) date.getSerializableExtra(DatePickerFragment.EXTRA_DATE);
...
}
}