viewPagerFragment的子fragment的onActivityResult()無法執行呼叫問題解決方案
阿新 • • 發佈:2019-02-09
問題出現場景:
nested fragment即fragment的子fragment執行startActivityForResult()後,子fragment的onActivityResult()無法執行
原因:
當我們從一個Activity啟動了一個Fragment,然後在這個Fragment中又去例項化了一些子Fragment,在子Fragment中去有返回的啟動了另外一個Activity,即通過startActivityForResult方式去啟動,這時候造成的現象會是,子Fragment接收不到OnActivityResult,如果在子Fragment中是以getActivity.startActivityForResult方式啟動,那麼只有Activity會接收到OnActivityResult,如果是以getParentFragment.startActivityForResult方式啟動,那麼只有父Fragment能接收(此時Activity也能接收),但無論如何子Fragment接收不到OnActivityResult。詳細原因見 關於fragment
中onActivityResult()回撥的問題。
解決方法:
1、在子fragment傳值時,將startActivityResult()改為,getParentFragment().startActivityForResult();
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); List<Fragment> fragments = getChildFragmentManager().getFragments(); if (fragments != null) { for (Fragment fragment : fragments) { if(fragment==null) continue; fragment.onActivityResult(requestCode, resultCode, data); } } }