Android:startActivityForResult 和 onActivityResult 問題

來源:互聯網
上載者:User

奇怪問題 startActivityForResult() 後直接調用 onActivityResult()
    開發人員都知道,可以通過使用 startActivityForResult() 和 onActivityResult() 方法來傳遞或接收參數。
然而在“輕聽”項目中,還沒等到被調用的 Activity 返回,onActivityResult() 就被執行了。
找了很久,終於通過小道訊息得知,這與 Activity 的載入模式(launchMode)有關,該屬性可以在 AndroidManifest.xml 中設定。
原先將其設為 singleInstance,經測試,所有需要傳遞或接收的 Activity 不允許設定該屬性,或只能設為標準模式,否則系統將在 startActivityForResult() 後直接調用 onActivityResult()。

調用startActivityForResult後,onActivityResult無響應的問題
兩個activity傳遞資料和返回資料時,請求方的onActivityResult始終無響應,通過debug偵錯模式也沒見調用該方法。查看了各種配置和程式碼,均未發現有錯誤之處。後面找了很多資料,總算看到一個朋友說是調用startActivityForResult的參數問題,即調用時這樣:
startActivityForResult(intent, 0);
是第二個參數的問題,該參數必須大於0才能在傳回值,並啟用onActivityResult方法。
我最開始是用的一個activity預設的常量:RESULT_OK,跟蹤了代碼後發現,該常量的值為-1,當然沒法啟用 onActivityResult方法了,隨後隨便修改為一個大於0的整數,程式即通跑成功。
startActivityForResult(intent, 1); //這樣就行了

1.startActivityForResult(Intent intent, Int requestCode);

2.setResut(int resultCode, Intent intent);

3.onActivityResult(int requestCode, int resultCode, Intent intent);

 

注意事項:

1.最近使用startActivityForResult,出錯,跟蹤後發現activity並沒有被啟動,而是直接執行 onActivityResult。後查看日誌發現

“05-19 02:11:19.822: WARN/ActivityManager(67): Activity is launching as a new task, so cancelling activity result.”

原來是我把要啟動的activity的launchmode設定成singleTask了。

把目標activity的launchmode去掉,正確。

總結:目標activity的launchmode不能設定成singleTask。

2.requestCode值>=0,否則,startActivityForResult就變成了 startactivity

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.