當想要切換Activity時,可以用兩個方式,startActivity與startActivityForResult
而這兩個又有什麼分別呢?
假設目前執行是A activity,startActivity就是單純傳資料給B activity並啟動,而startActivityForResult則是多了一件事情,就是當B activity結束時,可以回傳狀態給A activity。
簡單的範例startActivity:AActivity
簡單的範例startActivityForResult:AActivity
我們現在完成了開啟與傳資料的動作,當我們使用startActivityForResult,我們必須在BActivity增加setResult且AActivity增加onActivityResult功能才行。
主要是一個概念呈現,在實做過程中遇到一個問題,那就是BActivity還沒結束但就已經觸發onActivityResult,這有可能是在AndroidManifest.xml裡activity設為android:launchMode="singleTask",改為singleTop就正常了。
參考資料:
Android Developers - Starting Another Activity
stackoverflow - onActivityResult() called prematurely
而這兩個又有什麼分別呢?
假設目前執行是A activity,startActivity就是單純傳資料給B activity並啟動,而startActivityForResult則是多了一件事情,就是當B activity結束時,可以回傳狀態給A activity。
簡單的範例startActivity:AActivity
... String test = "TEST"; Intent intent = new Intent(context, BActivity.class); intent.putExtra(BActivity.TEST_PARAM, test); startActivity(intent); ...
簡單的範例startActivityForResult:AActivity
public static final int REQUEST_CODE = 0; ... String test = "TEST"; Intent intent = new Intent(context, BActivity.class); intent.putExtra(BActivity.TEST_PARAM, test); startActivityForResult(intent, REQUEST_CODE); ...
我們現在完成了開啟與傳資料的動作,當我們使用startActivityForResult,我們必須在BActivity增加setResult且AActivity增加onActivityResult功能才行。
class BActivity ... ... // 沒有回傳資料的方式 setResult(RESULT_OK) // 回傳資料的方式 String back = "Back Test"; Intent intent = new Intent(); intent.putExtra(BActivity.TEST_PARAM, back); setResult(RESULT_OK, intent); finish(); ... class AActivity ... ... @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case REQUEST_CODE: ... } } ...
主要是一個概念呈現,在實做過程中遇到一個問題,那就是BActivity還沒結束但就已經觸發onActivityResult,這有可能是在AndroidManifest.xml裡activity設為android:launchMode="singleTask",改為singleTop就正常了。
參考資料:
Android Developers - Starting Another Activity
stackoverflow - onActivityResult() called prematurely
留言
張貼留言