Android基础之startActivityForResult()的用法详解
作者:netcon 发布时间:2022-05-28 03:37:29
前言
安卓开发中一个很基础的操作就是打开一个 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开发者们能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
来源:http://conw.net/archives/44/
猜你喜欢
- 引言:在Object基类中,有一个方法叫clone,产生一个前期对象的克隆,克隆对象是原对象的拷贝,由于引用类型的存在,有深克隆和浅克隆之分
- Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,注意是默认情况下,一个
- 本文实例讲述了C#实现的文件上传下载工具类。分享给大家供大家参考,具体如下:这里给出的工具类是在VS2013环境下采用C#语言实现文件上传、
- 1|1简介最近基于最新的Activiti7配置了SpringBoot2。简单上手使用了一番。发现市面上解决Activiti7的教程很少,采坑
- Flyweight定义:避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类)。为什么使用共享模式/享元模式面向对象语言的
- C#延时函数sleepsleepusing System.Threading; //导入命名空间,类Thread就在此空间中Th
- 首先,这两者是完全不同的概念,绝对不能混为一谈。1.什么是Java内存模型?Java内存模型是Java语言在多线程并 * 况下对于共享变量读写
- 目录基于Java的guava开源库工具类1、guava的maven配置引入 2、LoadingCache3、Multimap 和
- 我们今天来聊下如何做实时通讯(先给知识点,实现原理,最后给出实现实时通信的具体代码--使用工具 android studio)现在先说下用到
- 前言Spring框架对Bean进行装配提供了很灵活的方式,下面归纳一下主要的方式:在XML中进行显示配置在Java中进行显示配置隐式的bea
- 代码案例一:private void button1_Click(object sender, EventArgs e) &n
- 本文实例为大家分享了C#实现围棋游戏的具体代码,供大家参考,具体内容如下之所以选择围棋作为大作业一方面是想挑战一下,另一方面是由于从6岁学围
- 这篇文章主要介绍了SpringBoot如何读取war包jar包和Resource资源,文中通过示例代码介绍的非常详细,对大家的学习或者工作具
- 背包问题主要是指一个给定容量的背包、若干具有一定价值和重量的物品,如何选择物品放入背包使物品的价值最大。其中又分01背包和无限背包,这里主要
- BigDecimal的舍入模式(RoundingMode)BigDecimal.divide方法中必须设置roundingMode,不然会报
- web.xml中设置:<servlet> <servlet-name>DisplayChart</servle
- 三种方式 下面为大家一一对应过滤器的方式 * 的方式过滤器的方式这种方式简单点 但是可配置性不高注意:一定得扫描到spring容器中创建一个
- 委托的Invoke方法用来进行同步调用。同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行。同步调用的例子:
- 线程中start方法与run方法的区别在线程中,如果start方法依次调用run方法,为什么我们会选择去调用start方法?或者在java线
- 本文实例讲述了Java删除二叉搜索树最大元素和最小元素的方法。分享给大家供大家参考,具体如下:在前面一篇《Java二叉搜索树遍历操作》中完成