您的位置:首页 > 移动开发 > Android开发

Fragment中使用 startActivityForResult 与 onActivityResult

2017-08-30 15:12 387 查看
startActivityForResult的主要作用就是它可以回传数据,假设我们有两个页面,首先进入第一个页面,里面有一个按钮,用于进入下一个页面,当进入下一个页面时,进行设置操作,并在其finish()动作或者back动作后,将设置的值回传给第一个页面,从而第一个页面来显示所得到的值。这个有一点像回调方法,就是在第二个页面finish()动作或者back动作后,会回调第一个页面的onActivityResult()方法,所以我们可以重写一下这个方法。

但是当我们从Fragment中startActivityForResult跳转到Activity中,却发现数据传递不回来。因为这时我们使用的是activity的startActivityForResult方法,我们只需将其改为Fragment的startActivityForResult即可。

Intent intent = new Intent(activity, PdfReaderActivity.class);
this.startActivityForResult(intent, 100); // this为Fragment


@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
switch (requestCode) {
case 100:
// 处理的代码;
break;
default:
break;
}
}


但是如果这个Fragment依附的那个Activity也重写了onActivityResult()方法,那么这个Fragment的onActivityResult()方法就获取不到数据了(被那个依附的Activity接受了),这时候我们只需要在这个Activity的onActivityResult()中获取到这个Fragment的对象(通过tag),然后调用这个fragment中的onActivityResult()就可以将值传到这个fragment中了

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
switch (requestCode) {
case Constant.REQUEST_CODE_SCAN_QR:
onResultScanQr(resultCode, intent);
break;
//传到对应fragment中
case Constant.REQUEST_CODE_OPEN_FILE:
((HomeFragment)getSupportFragmentManager().findFragmentById(R.id.fl_home)).onActivityResult(requestCode, resultCode, intent);
break;
default:
break;
}
}


如有疑问或不对之处,请指出共同交流进步。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息