欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android基础之startActivityForResult()的用法详解

程序员文章站 2024-02-13 15:34:46
前言 安卓开发中一个很基础的操作就是打开一个 activity ,另一个很必要的操作就是,打开一个 activity ,在打开的 activity 中操作之后并获得返回结...

前言

安卓开发中一个很基础的操作就是打开一个 activity ,另一个很必要的操作就是,打开一个 activity ,在打开的 activity 中操作之后并获得返回结果。

两个 activity

为了演示这个操作,我们需要两个 activity : mainactivity 和 otheractivity ,在 mainactivity 中通过 intent 启动 otheractivity ,并获得 otheractivity 结束后返回的结果,例子仅作演示,为了方便,我直接在 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();
 }
}

整个代码的执行逻辑如下:

1、两个 activity 的代码就是这样的, 当 mainactivity 中的 button 被触发 onclick() 事件后,把 mainactivity 中的 edittext 的内容发给了 otheractivity 。

2、otheractivity 打开并初始化好控件后,把 edittext 的内容设置为 mainactivity 发过来的内容。

3、当 otheractivity 中的 button 被触发 onclick() 事件后,把 otheractivity 中的 edittext 的内容返回给 mainactivity。

4、当返回到 mainactivity 时,会执行 ononactivityresult() 方法的内容,判断如果 requestcode 和 resultcode 无误后,把 mainactivity 中的 edittext 的内容改为 otheractivity 返回的结果。(这里判断了 requestcode 和 resultcode ,所以 otheractivity 通过 back 键返回时, mainactivity 的内容不会改变)

所以结果就是,通过这样的方式打开这两个activity,他们中的 edittext 的内容是同步的,一个 activity 改变了,到另一个 activity 中也会跟着改变。

总结

好了,以上就是关于android中startactivityforresult() 的全部内容了,希望本文的内容对各位android开发者们能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对的支持。