热门标签 | 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();
}

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


推荐阅读
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社区 版权所有