利用Intent传值
来源:互联网 发布:北京淘宝培训一对一 编辑:程序博客网 时间:2024/06/13 08:57
利用Intent传值
转载请注明出处:
http://blog.csdn.net/xiao_spring/article/details/64126155
在之前的博客里,我有写到Intent在Activity的显式和隐式的调用方式。
详情请点击:
Intent(信使)显式与隐式调用
那么,如果我们想要在不同的Activity之间传值,该如何操作呢?
让我们仔细考虑Intent中action和category的概念,当我们在页面A设置Intent的action及category时,其实可以将这两个属性当成要传递的数据。
但我们总不能把想要传递的数据放到这两个属性里吧,别担心,Intent类有专门的方法解决这个问题。
正向传递
我们可以将Intent当做一个桥梁,以此输送数据。
A端代码:
Intent intent = new Intent(); intent.setClass(this,SecondActivity.class); intent.putExtra("dataName","从A传递过来的内容"); startActivity(intent);
B端代码:
textView = (TextView) findViewById(R.id.textview);Intent intent = getIntent();String data = intent.getStringExtra("dataName");textView.setText(data);
同样的,如果我们想要传递的数据类型不是字符串类型,Intent类也提供了其他的数据传递方法,这里不加赘述。
另外,如果涉及到三个及三个以上Activity的数据传递,那么我们继续使用上面的方法,步骤如下(以3个Activity间数据的正向传递为例):
- 将ActivityA的数据塞入Intent中,传递
- 在ActivityB中解析传来的Intent,再次塞入Intent,传递
- 在ActivityC中解析传来的Intent,结束
仔细分析上述步骤,如果在步骤2中,没有对所传递的数据进行操作,那么这种传递方式显然十分费事。
我们知道Android是基于Java语言进行开发的,Java中bundle是一种存放字符串和Parcelable类型数据的map类型的容器类,通过存放数据键(key)获取对应的各种类型的值(value),而且必须通过键(key)获取,这样可以解决上述的问题。
实际代码如下:
A端:
Intent intent = new Intent(); intent.setClass(this,SecondActivity.class); Bundle bundle = new Bundle(); bundle.putString("dataName","用Bundle从A传递过来的内容"); intent.putExtras(bundle); startActivity(intent);
B端:
Bundle bundle = this.getIntent().getExtras(); String data = bundle.getString("dataName");
写到这里,大家有没有感觉到利用Bundle传值有一种封装的思想呢?
反向传递
说是反向传递,其实是经历了一次正向传递后的传递,主要涉及到
ActivityB在关闭后如何将数据返回给ActivityA。
A端:
- 启动代码块
Intent intent = new Intent(); intent.setClass(this,SecondActivity.class); Bundle bundle = new Bundle(); bundle.putString("dataName","用Bundle从A传递过来的内容"); intent.putExtras(bundle); startActivityForResult(intent,1);//第二个参数是请求码
- 回调代码块
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 1: if(resultCode == RESULT_OK) { String str= data.getStringExtra("dataReturn"); //数据处理 break; default: break; } super.onActivityResult(requestCode, resultCode, data); }
从上述代码可以知道,有数据返回需求的Activity在启动时要使用startActivityForResult方法,且多了一个请求码参数,这个是用来保证正确调用的。
B端
Intent intentReturn = new Intent(); intentReturn.putExtra("dataReturn", "从B返回的数据"); setResult(RESULT_OK,intentReturn); finish();
这里的setResult方法是专门向上一个Activity反馈的,其中第一个参数(int类型)表明处理结果,第二个参数则将带有数据的Intent返回过去。
完。
- 利用Intent传值
- 利用Intent启动Activity
- 利用Intent切换Activity
- 利用intent打开图片库
- 利用intent返回activity
- 利用Intent获取数据
- 利用Intent传递数据
- preferenceScreen 利用intent跳转activity
- Intent 传递 List 利用Serializable
- Intent 传递 List 利用Serializable
- Android 利用Intent实现分享
- 利用Intent进行传值
- 利用Intent.ACTION_SEND进行分享
- 利用Intent.ACTION_SEND进行分享
- 利用Intent传递复杂数据
- 利用Intent.ACTION_SEND进行分享
- 利用Intent进行数据传递
- Intent传值
- 过滤器和拦截器区别
- Android插件式换肤框架搭建
- 辗转相除法证明+最小公倍数证明+其他相关证明
- MAP、SRM、ERM与MLE
- option 43和option 60
- 利用Intent传值
- 300万数据的导入导出
- spring框架归纳
- _T含义 C++语言中“_T”
- iOS变长参数
- Android之数据保存--SharedPreference
- 备份当前执行A项目与B项目
- css-对齐
- TelephonyManager的介绍 & Android获取SIM卡信息、设备信息