案例1
针对在 Fragment 中调用 startActivityForResult(…) 接收 Activity 返回值,Fragment 中的 onActivityResult(…) 无响应问题。
解决思路如下:
1.调用 getSupportFragmentManager() 方法,获取到当前 Activity 中的 Fragment 集合。
2.遍历该集合,手动调用在当前Activity中的Fragment中的onActivityResult()方法。
代码如下:
public abstract class BaseActivity extends AppCompatActivity {
// 其他代码...
/**
* 解决Fragment中的onActivityResult()方法无响应问题。
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
/**
* 1.使用getSupportFragmentManager().getFragments()获取到当前Activity中添加的Fragment集合
* 2.遍历Fragment集合,手动调用在当前Activity中的Fragment中的onActivityResult()方法。
*/
if (getSupportFragmentManager().getFragments() != null && getSupportFragmentManager().getFragments().size() > 0) {
List<Fragment> fragments = getSupportFragmentManager().getFragments();
for (Fragment mFragment : fragments) {
mFragment.onActivityResult(requestCode, resultCode, data);
}
}
}
// 其他代码...
}
案例2
针对多重 Fragment 嵌套时,调用 startActivityForResult(…) 接收 Activity 返回值,Fragment 中的 onActivityResult(…) 无响应问题。
解决思路如下:
1.直接依附 Activity 的同上面解决方式,对于子 Fargment 的解决方式是调用 getChildFragmentManager() 方法,获取到当前 Fragment 中的子 Fragment 集合。
2.遍历该集合,手动调用在当前 Fragment 中的子 Fragment 中的 onActivityResult() 方法。
3.注意:不管是直接依附与 Activity 的 Fragment 还是嵌套在 Fragment 上的 Fragment 都需要在 Activity 做如上处理。
代码如下:
public abstract class BaseFragment extends Fragment {
// 其他代码...
/**
* 解决子Fragment中的onActivityResult()方法无响应问题。
*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (getChildFragmentManager().getFragments() != null && getChildFragmentManager().getFragments().size() > 0){
List<Fragment> fragments = getChildFragmentManager().getFragments();
for (Fragment mFragment: fragments) {
mFragment.onActivityResult(requestCode, resultCode, data);
}
}
}
// 其他代码...
}