热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android--Intent在活动间传递数据

声明创建一个简单的应用,在主活动创建3个Button控件,并创建一个TextView控件用于显示接受返回数据,创建SecondActivity,并添加一个按钮控件用于返回,用于返回上层

声明

创建一个简单的应用,在主活动创建3个Button控件,并创建一个TextView控件用于显示接受返回数据,创建SecondActivity,并添加一个按钮控件用于返回,用于返回上层,同时添加TextView控件用于显示主活动传递来的数据!
界面如下:

MainActivity
(MainActivity)
SecondActivity
(SecondActivity)

使用Intent向下一层活动传递数据:

1.在MainActivity中为Button添加监听器,这里采用不同于之前的注册监听器方法,代码如下:

 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bt1=(Button)findViewById(R.id.bt1);
Button bt3=(Button )findViewById(R.id.bt3);
Button bt4=(Button )findViewById(R.id.bt4);
View.OnClickListener listener=new View.OnClickListener() {
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.bt1:{
String str="When you found this ,the test is just ok !";
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("test_key",str);
startActivity(intent);
};break;/*[注释1]*/
case R.id.bt3:{
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
};break;/*[注释2]*/

case R.id.bt4:{
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivityForResult(intent,1);
};break;/*[注释3]*/
}
}
};
/*调用之前的方法,设置监听器*/
bt1.setOnClickListener(listener);
bt3.setOnClickListener(listener);
bt4.setOnClickListener(listener);
}

[注释1]:这里当点击事件为点击bt1的时候, 使用显式Intent进行活动的打开,并使用putExtra()方法将字符串信息附加到Intent里,传递到下一个活动中,其中test_key为键,用于后面从Intent中获取值,第二个参数为真正要传递的数据。
[注释2]:这里并没有附加数据,而只是简单的打开SecondActivity活动。
[注释3]:这里的按钮是返回数据使用的按钮控件,此处不做过多解释。

2.在SecondActivity中将从MainActivity中传递的数据从intent中取出,代码如下:

public class SecondActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent intent=getIntent();/*[注释1]*/
String data=intent.getStringExtra("test_key");/*[注释2]*/
TextView text=(TextView)findViewById(R.id.textStr);
text.setText(data);/*[注释3]*/
}
}

[注释1]:定义一个新的Intent对象intent用于接受使用getIntent()方法获取到的Intent对象。
[注释2]:定义新的String对象data接受来自intent的字符串,getStringExtra()方法接受的参数为键值,即putExtra()方法中的第一个参数,只有对应的键值才能取出相应的数据,由于我们传递的是字符串数据,所以我们使用的是getStringExtra()方法,相对应的,我们获取整型的数据值可以使用getIntExtra()方法,获取传递的布尔类型的数据可以使用getBooleanExtra()方法。
[注释3]:这里我们将TextView实例化,获取到SecondActivity中TextView控件的实例text,使用setText()方法给当前TextView设置文字为data的数据值。

效果如下:
这里写图片描述

使用Intent向上一个活动返回数据:

1.在MainActivity中设置启动SecondActivity的方法为startActivityForResult()

case R.id.bt4:{
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivityForResult(intent,1);
};break;
/*startActivityForResult(),第一个参数为Intent对象,第二个参数为请求码,这里的请求码为唯一值,用来之后处理返回数据时判断数据的来源。*/

2.在SecondActivity中为返回按钮注册监听器,代码如下:

        Button bt2=(Button)findViewById(R.id.bt2);
bt2.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Intent intent=new Intent();
intent.putExtra("data_return","Hello, I come from Second_Activity!");
setResult(RESULT_OK,intent);/*[注释1]*/
finish();
}
});

[注释1]:这里的setResult()方法第二个参数传入Intent对象,第一个参数是执行结果,有RESULT_OK,RESULT_CANCELED,RESULT_FIRST_USER ,在调用系统app时返回时RESULT_CANCELED如字面意思代表取消,RESULT_OK代表成功。RESULT_FIRST_USER 我没碰到过。
例如你的一个activity启动系统相册选照片,你选完后gallery会返回给你RESULT_OK,如果没选则会返回RESULT_CANCELED。如果是你自己的应用内部调用,其实可以通过其他方法判断,不过最好还是按照系统标准来做。另外这几个变量是Activity中的final static变量当枚举用的。

3.在MainActivity中重写解析数据的函数,代码如下:

 @Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
switch(requestCode){/*[注释1]*/
case 1:{
if(resultCode==RESULT_OK){/*[注释2]*/
String returnedData= data.getStringExtra("data_return");
TextView text_main=(TextView)findViewById(R.id.textStr2);
text_main.setText(returnedData);
}
};break;
}
}

[注释1]:根据请求码来判断数据的来源,进行相应的操作
[注释2]:根据resultcode判断是否成功,之后进行相应的操作,这里将字符串打印到TextView控件中。
PS:由于有时候我们并不会按返回按钮进行返回,而可能直接点击返回键进行返回,我们可以进行onBackPressed()函数的重写,使之每次按下返回键都会进行调用,代码如下:

        @Override
public void onBackPressed(){
Intent intent=new Intent();
intent.putExtra("data_return", "Hello, I come from Second_Activity!");
setResult(RESULT_OK,intent);
finish();
}

效果如下:
这里写图片描述


推荐阅读
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Java图形化计算器设计与实现
    本文介绍了使用Java编程语言设计和实现图形化计算器的方法。通过使用swing包和awt包中的组件,作者创建了一个具有按钮监听器和自定义界面尺寸和布局的计算器。文章还分享了在图形化界面设计中的一些心得体会。 ... [详细]
  • 今日份分享:Flutter自定义之旋转木马
    今日份分享:Flutter自定义之旋转木马-先上图,带你回到童年时光:效果分析子布局按照圆形顺序放置且平分角度子布局旋转、支持手势滑动旋转、快速滑动抬手继续旋转、自动旋转支持X轴旋 ... [详细]
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • 在C#中,使用关键字abstract来定义抽象类和抽象方法。抽象类是一种不能被实例化的类,它只提供部分实现,但可以被其他类继承并创建实例。抽象类可以用于类、方法、属性、索引器和事件。在一个类声明中使用abstract表示该类倾向于作为其他类的基类成员被标识为抽象,或者被包含在一个抽象类中,必须由其派生类实现。本文介绍了C#中抽象类和抽象方法的基础知识,并提供了一个示例代码。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • Android源码中的Builder模式及其作用
    本文主要解释了什么是Builder模式以及其作用,并结合Android源码来分析Builder模式的实现。Builder模式是将产品的设计、表示和构建进行分离,通过引入建造者角色,简化了构建复杂产品的流程,并且使得产品的构建可以灵活适应变化。使用Builder模式可以解决开发者需要关注产品表示和构建步骤的问题,并且当构建流程发生变化时,无需修改代码即可适配新的构建流程。 ... [详细]
author-avatar
fanhua1
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有