Android 用Intent实现活动之间数据的传递
好了,大家,基本最最基本的通过一个Intent启动一个活动大家都懂了,那我们学一下,那个那个,就是Intent之间数据的传递。
先看看当前活动向下一个活动传递数据:
这里用到一个putExtra()方法,我们呢,在menu里再加一个选项。
case R.id.chuandi_hw:
String hw = "hello world";
Intent intent4 = new Intent(FirstActivity.this,ThirdActivity.class);
intent4.putExtra("hw",hw);
startActivity(intent4);
break;
直接跳转到ThirdActivity并向这个活动发送一个字符串,putExtra方法有两个参数,第一个是内容的键,第二个是真正的内容。
活动三接收数据就这样:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.third_layout);
Intent intent = getIntent();
String data = intent.getStringExtra("hw");
Log.d("ThirdActivity",data);
}
这里,用getIntent方法得到启动ThirdActivity活动的Intent,然后,通过getStringExtra和键值得到传递过来的数据,这里传过来的是String,如果传过来的是整形,就用getIntExtra,如果传过来的是boolean,酒桶getBooleanExtra方法得到,以此类推。
再看一看给上一个活动返回数据:
既然学会了怎么向下一个活动发送数据,我们在学一学下一个活动向上一个活动返回数据,向下一个活动发送数据使用的方法是putExtra,我们向上一个活动返回数据用的方法是startActivityForResult(),这个方法有两个参数,第一个还是Intent,第二个参数是请求码,虽然我不知道请求码是什么,但书上说请求码只要是一个唯一值就行了。接下来就是修改ThirdActivity的值就行了。
Button but = (Button) findViewById(R.id.button_3);
but.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick (View v){
Intent intent = new Intent();
intent.putExtra("data","hello ***");
setResult(RESULT_OK,intent);
finish();
}
});
作者说这个setResult()方法很重要,两个参数,第一个参数是用来返回数据时传入的处理结果,易班只是用RESULT_OK和RESULT_CANCELED两个值,第二个参数则是把带有数据的Intent传回去,然后调用finish()方法来销毁当前活动。
本例子onActivityResult()方法重写如下:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode){
case 1:
if(requestCode == RESULT_OK){
String returnedData = data.getStringExtra("data");
Log.d("FirstActivity",returnedData);
}
break;
default:
}
// super.onActivityResult(requestCode, resultCode, data);
}
这个方法有三个参数,第一个requestCode就是我们在启动活动时传入的请求码。第二个参数resultCode就是我们返回数据是传入的处理结果,第三个参数data就是携带者返回数据的Intent。
(解释一下请求码(requestCode):其实请求码对应的还有一个是结果码,用来标识这个活动是被那个按钮启动起来的,从而执行相应的业务逻辑。结果码也是,因为需要返回值的时候启动的是用startActivityForResult启动的,所以下一个活动关闭时会自动回调上一个互动的onActivityResult方法,所以结果码是用来判断返回值(requestCode)是哪个活动返回回来的,从而执行响应的逻辑。)
这里还有一个问题,我们在ThirdActivity里面button写成了关闭活动,但是如果我们用返回的方式来关闭这个活动返回上一个活动,这个返回值就不能传给上一个活动,所以我们在ThirdActivity里面重写一下onBackPressed方法,来解决这个问题。
@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("data","exit by back");
setResult(RESULT_OK,intent);
finish();
//super.onBackPressed();
}
这样,当用户点击返回键时就执行onBackPressed方法了。
上一篇: 她扶持丈夫登上皇位,为什么要把岳父毒死?
下一篇: 范缜神灭论原文及翻译,范缜神灭论影响
推荐阅读
-
关于Android Activity之间传递数据的6种方式
-
Android Activity之间的数据传递方法总结
-
Android之Intent附加数据的两种实现方法
-
Android 两个Fragment之间的跳转和数据的传递实例详解
-
vue中通过使用$attrs实现组件之间的数据传递功能
-
用react-redux实现react组件之间数据共享的方法
-
C#使用委托(delegate)实现在两个form之间传递数据的方法
-
Android 入门第十讲02-广播(广播概述,使用方法(系统广播,自定义广播,两个activity之间的交互和传值),EventBus使用方法,数据传递,线程切换,Android的系统广播大全)
-
Android实现Activities之间进行数据传递的方法
-
android app之间数据传递 (一)intent