一、为什么要写 startActivityForResult()
- 在实际项目中我们会有这样的应用场景,在 Activity1 的 Fragment1 中的某个点击事件,跳转到另一个 Activity2 的 Fragment2 中,而 Fragment2 需要返回一些数据给 Fragment1,这时候我们该怎么办呢
通过 Fragment 的 startActivityForResult() 方法可以完成上述的操作,但是这又跟我们平时的 Activity 的 startActivityForResult() 不一样, Fragment 没有 setResult() 方法,无法设置返回的数据。
正确的操作思路是:Fragment1 调用 startActivityForResult() 方法之后,跳转到 Activity2 中,Activity2 先把数据取出来,然后通过 Bundle 把数据设置给 Fragment2 ,Fragment2 把数据取出来,然后调用 getActivity().setResult() 方法设置返回数据,然后在 Fragment1 的 onActivityResult() 中拿到返回的数据
二、实际操作
2.1 Fragment1,即 FirstFragment 代码如下:
|
|
2.2 Activity2 即 ResultActivity 的代码如下:
|
|
注意:ResultFragment 一定要是同一个对象,不要创建两个对象
2.3 Fragment2 即 ResultFragment 的代码如下:
|
|
注意: 这里的逻辑是,在创建 ResultFragment 对象的时候,就把数据设置进 Bundle 中了,然后在 onCreate 方法中取出 bundle 中的数据,并设置返回的数据。