標籤:
項目中用到彈出Acitivity來獲得使用者輸入 所以用到 onActivityResult()方法接受使用者輸入
奇怪問題 startActivityForResult() 後直接調用 onActivityResult()
開發人員都知道,可以通過使用 startActivityForResult() 和 onActivityResult() 方法來傳遞或接收參數。
然而在項目中,還沒等到被調用的 Activity 返回,onActivityResult() 就被執行了。
找了很久,終於通過小道訊息得知,這與 Activity 的載入模式(launchMode)有關,該屬性可以在 AndroidManifest.xml 中設定.
<activity android:name="SaveFileActivity" android:launchMode="singleTask" android:theme="@style/savefile"/>
原先將其設為 singleInstance,經測試,所有需要傳遞或接收的 Activity 不允許設定該屬性,或只能設為標準模式,否則系統將在 startActivityForResult() 後直接調用 onActivityResult()。 將上面XML中的singleTask去掉就可以了
調用startActivityForResult後,onActivityResult無響應的問題
兩個activity傳遞資料和返回資料時,請求方的onActivityResult始終無響應,通過debug偵錯模式也沒見調用該方法。查看了各種配置和程式碼,均未發現有錯誤之處。後面找了很多資料,總算看到一個朋友說是調用startActivityForResult的參數問題,即調用時這樣:
startActivityForResult(intent, 0);
是第二個參數的問題,該參數必須大於0才能在傳回值,並啟用onActivityResult方法。
我最開始是用的一個activity預設的常量:RESULT_OK,跟蹤了代碼後發現,該常量的值為-1,當然沒法啟用 onActivityResult方法了,隨後隨便修改為一個大於0的整數,程式即通跑成功。
startActivityForResult(intent, 1); //這樣就行了
Android基礎:startActivityForResult 和 onActivityResult 問題