在写这篇博客之前,我想对自己说一句话:“今天你真的sb了一把”
先说下我出现问题的环境,MainActivity中有两个fragment,一个首页fragment,另一个是个人fragment,使用viewPage填充fragment。首页fragment跳转到登录的activity(LoginActivity),LoginActivity关闭的时候需要首页fragment知道。
如果想让fragment调用onActivityResult方法,需要在MainActivity中的onActivityResult方法中添加这个代码
super.onActivityResult(requestCode, resultCode, data);
看具体实现流程
- 首页fragment中跳转的代码
startActivityForResult(new Intent(getContext(), LoginActivity.class),88);
首页fragment中onActivityResult代码
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == 999) {}
}
LoginActivity中finish之前调用的代码
setResult(999);
finish();
- MainActivity中的onActivityResult中的代码(很关键)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (resultCode) {
case 999:
super.onActivityResult(requestCode, resultCode, data);
break;
case Activity.RESULT_OK:
// 用户选择开启 Bluetooth,Bluetooth 会被开启
showToast("蓝牙已开启");
startScanBluetoothDevice();
break;
case Activity.RESULT_CANCELED: {
// 用户拒绝打开 Bluetooth, Bluetooth 不会被开启
}
break;
default:
break;
}
}
意思是当结果码为999的时候,不处理,交给下级首页fragment处理。这样首页fragment的onActivityResult方法就走了
说下今天为什么sb了,我在跳转到LoginActivity的时候,代码是这么写的
- startActivityForResult(new Intent(getContext(), LoginActivity.class),-1);
知道为什么了吧,至于为什么不能写-1,自己看源码吧。。。。