溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Android基礎(chǔ)之startActivityForResult()的用法詳解

發(fā)布時(shí)間:2020-10-12 16:29:07 來源:腳本之家 閱讀:114 作者:netcon 欄目:移動(dòng)開發(fā)

前言

安卓開發(fā)中一個(gè)很基礎(chǔ)的操作就是打開一個(gè) Activity ,另一個(gè)很必要的操作就是,打開一個(gè) Activity ,在打開的 Activity 中操作之后并獲得返回結(jié)果。

兩個(gè) Activity

為了演示這個(gè)操作,我們需要兩個(gè) Activity : MainActivity 和 OtherActivity ,在 MainActivity 中通過 Intent 啟動(dòng) 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();
 }
}

整個(gè)代碼的執(zhí)行邏輯如下:

1、兩個(gè) 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 時(shí),會(huì)執(zhí)行 ononActivityResult() 方法的內(nèi)容,判斷如果 RequestCode 和 ResultCode 無誤后,把 MainActivity 中的 EditText 的內(nèi)容改為 OtherActivity 返回的結(jié)果。(這里判斷了 RequestCode 和 ResultCode ,所以 OtherActivity 通過 Back 鍵返回時(shí), MainActivity 的內(nèi)容不會(huì)改變)

所以結(jié)果就是,通過這樣的方式打開這兩個(gè)Activity,他們中的 EditText 的內(nèi)容是同步的,一個(gè) Activity 改變了,到另一個(gè) Activity 中也會(huì)跟著改變。

總結(jié)

好了,以上就是關(guān)于Android中startActivityForResult() 的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)各位Android開發(fā)者們能帶來一定的幫助,如有疑問大家可以留言交流,謝謝大家對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI