Android基礎(chǔ)之startActivityForResult()的用法詳解
前言
安卓開發(fā)中一個很基礎(chǔ)的操作就是打開一個 Activity ,另一個很必要的操作就是,打開一個 Activity ,在打開的 Activity 中操作之后并獲得返回結(jié)果。
兩個 Activity
為了演示這個操作,我們需要兩個 Activity : MainActivity 和 OtherActivity ,在 MainActivity 中通過 Intent 啟動 OtherActivity ,并獲得 OtherActivity 結(jié)束后返回的結(jié)果,例子僅作演示,為了方便,我直接在 Java 文件中定義了控件,就不寫布局文件了。
MainActivity.java
package net.conw.intenttest; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; public class MainActivity extends Activity implements View.OnClickListener { private EditText editText; private Button button; public static int REQUEST_CODE = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout layout = new LinearLayout(this); editText = new EditText(this); button = new Button(this); button.setText("Main"); button.setOnClickListener(this); layout.addView(editText); layout.addView(button); setContentView(layout); } @Override public void onClick(View v) { Intent intent = new Intent(this, OtherActivity.class); intent.putExtra("text", editText.getText().toString()); startActivityForResult(intent, REQUEST_CODE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == REQUEST_CODE && resultCode == OtherActivity.RESULT_CODE) { editText.setText(data.getStringExtra("text")); } } }
OtherActivity.java
package net.conw.intenttest; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; public class OtherActivity extends Activity implements View.OnClickListener { private EditText editText; private Button button; public static int RESULT_CODE = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout layout = new LinearLayout(this); editText = new EditText(this); button = new Button(this); button.setText("Other"); button.setOnClickListener(this); layout.addView(editText); layout.addView(button); setContentView(layout); editText.setText(getIntent().getStringExtra("text")); } @Override public void onClick(View v) { Intent intent = new Intent(); intent.putExtra("text", editText.getText().toString()); setResult(RESULT_CODE, intent); finish(); } }
整個代碼的執(zhí)行邏輯如下:
1、兩個 Activity 的代碼就是這樣的, 當(dāng) MainActivity 中的 Button 被觸發(fā) onClick()
事件后,把 MainActivity 中的 EditText 的內(nèi)容發(fā)給了 OtherActivity 。
2、OtherActivity 打開并初始化好控件后,把 EditText 的內(nèi)容設(shè)置為 MainActivity 發(fā)過來的內(nèi)容。
3、當(dāng) OtherActivity 中的 Button 被觸發(fā) onClick()
事件后,把 OtherActivity 中的 EditText 的內(nèi)容返回給 MainActivity。
4、當(dāng)返回到 MainActivity 時,會執(zhí)行 ononActivityResult()
方法的內(nèi)容,判斷如果 RequestCode 和 ResultCode 無誤后,把 MainActivity 中的 EditText 的內(nèi)容改為 OtherActivity 返回的結(jié)果。(這里判斷了 RequestCode 和 ResultCode ,所以 OtherActivity 通過 Back 鍵返回時, MainActivity 的內(nèi)容不會改變)
所以結(jié)果就是,通過這樣的方式打開這兩個Activity,他們中的 EditText 的內(nèi)容是同步的,一個 Activity 改變了,到另一個 Activity 中也會跟著改變。
總結(jié)
好了,以上就是關(guān)于Android中startActivityForResult() 的全部內(nèi)容了,希望本文的內(nèi)容對各位Android開發(fā)者們能帶來一定的幫助,如有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
android 獲取本機(jī)其他app的版本信息的示例代碼
本篇文章主要介紹了android 獲取本機(jī)其他app的版本信息的示例代碼,具有一定的參考價值,有興趣的可以了解一下2017-09-09使用Docker來加速構(gòu)建Android應(yīng)用的基本部署思路解析
這篇文章主要介紹了使用Docker來加速構(gòu)建Android應(yīng)用的部署思路解析,在服務(wù)器中通過Docker鏡像來獲得更高效的開發(fā)和測試流程,需要的朋友可以參考下2016-01-01Android startActivityForResult和setResult的區(qū)別
這篇文章主要介紹了 Android startActivityForResult和setResult的區(qū)別的相關(guān)資料,希望通過本文能幫助大家理解這部分內(nèi)容,需要的朋友可以參考下2017-08-08Android自定義控件實(shí)現(xiàn)支付寶記賬餅圖
這篇文章主要為大家詳細(xì)介紹了Android自定義控件實(shí)現(xiàn)支付寶記賬餅圖,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04android自定義控件創(chuàng)建翻頁接口詳細(xì)代碼
這篇文章主要為大家介紹了android自定義控件創(chuàng)建翻頁接口詳細(xì)代碼,具有一定的實(shí)用性,感興趣的小伙伴們可以參考一下2016-07-07Android Drawerlayout側(cè)拉欄事件傳遞問題的解決方法
這篇文章主要為大家詳細(xì)介紹了Android Drawerlayout側(cè)拉欄事件傳遞問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11Android中使用DownloadManager類來管理數(shù)據(jù)下載的教程
這篇文章主要介紹了Android中使用DownloadManager類來管理數(shù)據(jù)下載的教程,針對HTTP下文件的下載與保存地址指定等基礎(chǔ)操作作出了詳細(xì)講解,需要的朋友可以參考下2016-04-04