1. 程式人生 > >viewPagerFragment的子fragment的onActivityResult()無法執行呼叫問題解決方案

viewPagerFragment的子fragment的onActivityResult()無法執行呼叫問題解決方案

問題出現場景:

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);
	            }
	        }
	    }