天天看點

startActivityForResult請求的requestCode和傳回的requestCode不一緻問題

調用的activity一定是本體,如果在fragment或其他*中直接請求startActivityForResult就會在某些手機出現問題

有幾種常見的情況:

1,接收回調的Activity 的啟動模式是singleTask,接受onActivityResult 的時候會有問題。

2,在fragment啟動Activity 時調用了getActivity().startSctivityForResult,然後會回調到fragment 所在的activity 的onActivityResult。

3,在fragment中調用startActivityForResult,當fragment有多層嵌套的時候也會回調到宿主activity 的nActivityResult 。

以上是我看到的一個部落客的解釋,以下是我的解放方法附上

解決方法:

如下圖我在一個主活動HomeActivity中通過ViewPager加載三個Fragment

startActivityForResult請求的requestCode和傳回的requestCode不一緻問題
startActivityForResult請求的requestCode和傳回的requestCode不一緻問題

然後在其中一個ContactsFragment通過startActivityForResult去啟動另一個Activity,傳過去一個requestCode值,但是我在傳回的時候,在HomeActivity的onActivityResult方法中接收的requestCode傳回值每次都不一樣,看了部落客之後想到用**getActivity()**去啟動,問題解決了,如下圖

startActivityForResult請求的requestCode和傳回的requestCode不一緻問題

仔細檢視了下兩個的不同,點進去檢視源碼你就會發現,沒有通過getActivity()的startActivityForResult()方法是Fragment類中的,而通過getActivity()方法點出來的startActivityForResult()方法則是FragmentActivity類中的,而這個類其實又是一層層繼承自Activity類的,

簡單說就是兩個方法來自不同的類中,前面個來自Fragment類,後面個來自Activity類,而我們傳回是需要傳回至最初的Acticity中,是以應該是通過getActivity().startActivityForResult()來啟動,即由主活動來啟動另一個活動,而不是通過Fragment來啟動另一個活動。

繼續閱讀