1. 程式人生 > >Android學習筆記(一)startActivityForResult經過強轉換變為可用

Android學習筆記(一)startActivityForResult經過強轉換變為可用

首先感謝吳浩傑學長!

startActivityForResult的坑

startActivityForResult是Context的一個例項方法。
因此它也隨著Context被Activity給繼承,還一步步繼承給了FragmentActivity
然而,這並不代表它可以被任意的Context所用

比如比如在這裡我們getContext得到的一個Context類因為不能用StartActivityForResult就會報錯

比如在這裡我們getContext得到的一個Context類因為不能用startActivityForResult就會報錯。
可是startActivityForResult的兄弟卻沒問題:如下圖:
我們發現沒有報錯
哈哈,這就是差別對待

那麼,如何解決這個坑

轉換為Context的子類Activity就可以呼叫了

如下圖:
如箭頭所指
我們發現此次沒有報錯,博主小哥哥運行了也沒有問題哦。
問題解決了,但是 我們不禁會有疑問:

這裡面原理何在?

有問題 我們當然找原始碼幫忙咯
Context裡的startActivityForResult
上面是Context裡的startActivityForResult,我們發現它根本就沒有被實現,只不過是拋了異常。這樣的startActivityForResult我們當然用不了啊。
但是 為什麼轉換為Activity後就可以呼叫了呢?
那我們就來看看Activity裡的原始碼
我們終於發現了真相
原來Activity實現了startActivityForResult,因為這個緣故我們就可以呼叫正常啦。
本人大一弱雞,難免疏忽出錯,若有大佬指點,不勝感激!
先謝謝啦