Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android編程入門 >> Android基礎:startActivityForResult 和 onActivityResult 問題

Android基礎:startActivityForResult 和 onActivityResult 問題

編輯:Android編程入門

項目中用到彈出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); //這樣就行了

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved