当前位置: 代码迷 >> 综合 >> Fragment中使用 startActivityForResult 与 onActivityResult
  详细解决方案

Fragment中使用 startActivityForResult 与 onActivityResult

热度:110   发布时间:2023-10-25 01:12:09.0

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
        @Overridepublic 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;}}

如有疑问或不对之处,请指出共同交流进步。

  相关解决方案