activity和fragment中startactivityforresult方法的區別
activity的startacitivityforresult方法這裡不做分析,有興趣的可以自己看原始碼。
fragment中的startactivityforresult方法
會呼叫其成員變數mHost的onStartActivityFromFragment方法。
這個mHost其實是FragmentActivity中的內部類HostCallbacks的實現物件,有興趣的同學可以去看FragmentMangerImpl和FragmentController的原始碼。
通過呼叫mHost的onStartActivityFromFragment方法,最終呼叫的是FragmentActivity中的startActivityFromFragment方法。
可以看到在這個方法中會把requestCode做一次左移16的操作,同事呼叫activity的startActivityForResult方法。
其他的不用分析,直接看onActivityResult方法
在這個方法中,會先把requestCode右移16位, 然後判斷右移之後的值是否等於0.前面已經瞭解到,fragment的requestCode因為系統給做了左移操作,所以在右移之後,值肯定是不等於0的。而且activity中的startactivityfroresult方法,會有requestCode的檢查
也就是說,activity中傳入的requestCode太大的話,會直接丟擲異常。
所以onActivityResult方法中的if語句,只有呼叫Fragment中的startActivityForResult方法才會走進來,看裡面的實現邏輯,可以知道會呼叫Fragment的onActivityResult方法。但是Activity的startActivityForResult方法不會通知Fragment呼叫onActivityResult方法,需要我們自己去通知Fragment.
另,呼叫Fragment中的startActivityForResult方法,activity中的onActivityResult方法得到的requestCode是左移之後的值(大於等於65535),而此時Fragment中的onActivityResult方法得到的requestCode是正常我們傳入的值。
相關文章
- Fragment中呼叫startActivityForResult的那些坑Fragment
- Activity的startActivityForResult
- Activity回傳資料方法startActivityForResult onActivityResult
- Activity、Fragment和IntentFragmentIntent
- Activity跳到指定的Fragment的方法Fragment
- Android開發中巧用Activity和FragmentAndroidFragment
- 將一個Activity中的資料傳到另一個Activity的Fragment中的方法Fragment
- getApplication和Activity.this的區別APP
- Android筆記之Fragment的startActivityForResult(與requestPermissions)Android筆記Fragment
- Android中Application和Activity的Context物件的區別AndroidAPPContext物件
- Java中 equals() 方法和 == 的區別Java
- Fragment Transactions和Activity狀態丟失Fragment
- laravel中delete()方法和destroy()方法的區別Laraveldelete
- Android讓Fragment載入到Activity中AndroidFragment
- jQuery中css()和attr()方法的區別jQueryCSS
- ROR中h()方法和sanitize的區別
- fragment返回鍵關閉fragment以及最後一個fragment的時候關閉activity的簡便方法Fragment
- Fragment傳值到ActivityFragment
- 監聽activity、fragment生命Fragment
- Fragment與Activity通訊Fragment
- Python中函式和方法的區別Python函式
- 介面和列舉在方法中的區別
- FTP 中ascii 和bin 的區別和使用方法FTPASCII
- savedInstanceState和 fragment.setRetainInstance以及 viewmodel的區別FragmentAIView
- ==和equals方法的區別
- http請求中get和post方法的區別HTTP
- prop()方法和attr()方法的區別
- Android--單Activity+多Fragment,玩轉FragmentAndroidFragment
- View.findViewById()和Activity.findViewById()區別View
- activity_main與fragment_mainAIFragment
- mysql中!=和is not的區別MySql
- JavaScript中for in 和for of的區別JavaScript
- mysql中“ ‘ “和 “ ` “的區別MySql
- Js中for in 和for of的區別JS
- sendRedirect()和forward()方法的區別Forward
- ## 運算子和方法的區別
- Android | Activity和Fragment最全生命週期+發現大牛AndroidFragment
- PHP 中的 -> 和 :: 的區別PHP