在通过Fragment
直接调用startActivityForResult()
启动Activity B,然后返回回来的时候,出现了请求码是类似于46395
这样的。对于这个问题,网上基本都是说这是因为Fragment
的机制,只要切换成getActivity().startActivityForResult()
就可以解决问题。但是,如果是基于ReactNative
的Activity
创建的Fragment
,这样就无法生效了。所以,我这边的一种解决方案是直接通过父 Activity
来调用。
- 在目标
Fragment
里面补充这两个方法
private void startActivityForResultByOwn(int requestCode, Intent intent) {
Activity act = getActivity();
if(act instanceof ParentActivity) {// 使用Fragment对应的父Activity
ParentActivity a= (ParentActivity) act;
a.startActivityForResultByOwn(intent, requestCode);
}
}
...
public void onResult4Activity(int requestCode, int resultCode, @Nullable Intent data) {
//activity 来回调结果
}
2.然后在父
Activity
里面引用回调
private void startActivityForResultByOwn(int requestCode, Intent intent) {
startActivityForResult(intent, requestCode);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (mFragment instanceof ChildFragment ) { //这里比对目标fragment
ChildFragment f = (ChildFragment ) mFragment;
f.onResult4Activity(requestCode, resultCode, data);
}
}
这只是其中的一种比较简单的解决方案,如果有更好的,麻烦告诉我哈 ^ _ ^
每多走一步,就与梦想更近一步。
网友评论