fragment间的数据传递---使用Fragment.onActivityResult()

版权声明:本文为博主原创文章,未经博主允许不得转载。 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); 
        ...
    }
}

猜你喜欢

转载自blog.csdn.net/johnWcheung/article/details/81226145