android基础笔记----Activity的启动与之间的信息传递
来源:互联网 发布:网络机柜的尺寸 编辑:程序博客网 时间:2024/04/28 22:07
Activity的启动与之间的信息传递
- 新建类Aty1继承自Activity,建立新layout布局文件aty1
- 在MainActivity,通过intent构造方法传入启动信息.
- 通过startActivity(intent)方法,启动活动.
官方文档 :
Create an intent for a specific component. All other fields (action, data,
type, class) are null, though they can be modified later with explicit
calls. This provides a convenient way to create an intent that is
intended to execute a hard-coded class name, rather than relying on the
system to find an appropriate class for you; see setComponent(android.content.ComponentName)
for more information on the repercussions of this.
第一个参数是上下文,通常指当前活动,第二个参数是要启动的活动.
例:在mainactivity利用一个按钮调用startActivity()方法启动新活动:
btnStaryAty1 = (Button) findViewById(R.id.statAty1); btnStaryAty1.setOnClickListener(new View.OnClickListener() {` @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this,Aty1.class); //数据......处理 startActivity(intent); } });
- 传递数据方法1:
调用intent.putExtra(“Key”,”“Value);传入数据
通过getIntent().getStringExtra(“Key”);获取相应Value字符串. - 传递数据方法2:
用Bundle传递
@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this,Aty1.class); //Bundle数据处理 data.putString("Key","天马流星拳"); //intent 填入Bundle类型 intent.putExtras(data); startActivity(intent); } }); }
获取:
通过Bundle data = getIntent().getExtras();
String value = data.getString(“Key”);获取字符串
Aty1设置:
//②获取Bundle Bundle data = getIntent().getExtras(); tvout.setText(data.getString("Key"));
- 通过Activity返回值传回数据:
则不能用startActivity
引入一个方法startActivityForResult
官方文档 : public void startActivityForResult(Intent intent,int requestCode)
Launch an activity for which you would like a result when it finished. When this activity exits, your **onActivityResult(int requestCode, int resultCode, Intent data) **method will be called with the given requestCode. Using a negative requestCode is the same as calling startActivity(android.content.Intent) (the activity is not launched as a sub-activity).
大概意思是:当requestCode大于0作为参数传入并且启动活动之后,在活动结束之后会自动调用onActivityResult(int requestCode, int resultCode, Intent data) 方法,你可以在这个方法中执行你要的操作.
注意requestCode的作用,参考这位老兄的博客:http://blog.csdn.net/jiangwei0910410003/article/details/16983049
假如一个活动有两个按钮,同样可以启动一个活动, requestCode可以用于区分不同按钮启动同一个活动并且做出不同处理.
@Override public void onCreate(Bundle savedInstanceState) { .... button1.setOnClickListener(newView.OnClickListener(){ public void onClick(View v) { startActivityForResult (newIntent(MainActivity.this, NewActivity.class), 1); }}); button2.setOnClickListener(newView.OnClickListener(){ public void onClick(View v) { startActivityForResult (newIntent(MainActivity.this, NewActivity.class), 2); }}); @Override protected voidonActivityResult(int requestCode, int resultCode, Intent data) { switch(requestCode){ case 1: //来自按钮1的请求,作相应业务处理 case 2: //来自按钮2的请求,作相应业务处理 } }
@Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this,Aty1.class); //Bundle数据处理 data.putString("Key","天马流星拳"); //intent 填入Bundle类型 intent.putExtras(data); startActivityForResult( intent , 7); //参数2 requestCode 传给 onActivityResult区分不同启动对象 } }); //处理Act1活动返回的数据 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { //通过Key获取值 String resultString = data.getStringExtra("Result_Key"); tvoutTextView.setText(resultString+"请求:"+ requestCode +"结果:" + resultCode); super.onActivityResult(requestCode, resultCode, data); }
在Act1 finish之前传入
Intent i = new Intent();i.putExtra("Result_Key", "我来自Aty1,Hello 主活动"); setResult(0,i);//参数1 resultCode,参数2 intent 传给 onActivityResult finish(); //关闭当前方法
隐式intent与显示intent–参考blog(http://tompig.iteye.com/blog/1096603)
- 显式Intent定义:对于明确指出了目标组件名称的Intent,我们称之为显式Intent。
- 隐式Intent定义:对于没有明确指出目标组件名称的Intent,则称之为隐式Intent。
隐式Intent由于没有明确的目标组件名称,所以必须由Android系统帮助应用程序寻找与Intent请求意图最匹配的组件。
Android系统寻找与Intent请求意图最匹配的组件具体的选择方法是:Android将Intent的请求内容和一个叫做IntentFilter的过滤器比较,IntentFilter中包含系统中所有可能的待选组件。
如果IntentFilter中某一组件匹配隐式Intent请求的内容,那么Android就选择该组件作为该隐式Intent的目标组件。
Android如何知道应用程序能够处理某种类型的Intent请求呢?这需要应用程序在AndroidManifest.xml中声明自己所含组件的过滤器(即可以匹配哪些Intent请求)。
一个没有声明Intent-Filter的组件只能响应指明自己名字的显式Intent请求,而无法响应隐式Intent请求。
而一个声明了IntentFilter的组件既可以响应显式Intent请求,也可以响应隐式Intent请求。在通过和 IntentFilter比较来解析隐式Intent请求时,Android将以下三个因素作为选择的参考标准。
- android基础笔记----Activity的启动与之间的信息传递
- android之Activity之间的信息传递
- Activity与Activity之间的信息传递、传值
- java Android之Activity之间简单的信息传递
- 关于android中Activity之间添加信息的传递
- android activity生命周期,activity信息保存,activity之间的信息传递
- android开发fragment、Activity与Activity之间的值传递
- 处于不同栈Activity之间的启动与数据传递
- 【Android零基础开发001】Activity启动与多个Activity之间的切换
- 【Android】Activity之间传递信息
- Android开发-基础:Activity之间的 对象传递
- Activity之间的数据传递、启动模式
- Android学习笔记——Activity之间的数据传递
- Android开发笔记---不同activity之间的数据传递
- Activity生命周期,启动Activity,以及Activity之间数据的传递
- 【自学笔记】Intent Extras附加信息——两个activity之间的信息传递
- Activity之间的信息传递(一)单向传递
- 使用 Intent 启动 Activity和Activity之间的数据传递
- opengl学习第二天
- 自定义控件其实很简单1/4
- 分治法实验-寻找第k小元素
- SSM整合
- Spark 基础函数
- android基础笔记----Activity的启动与之间的信息传递
- Spring MVC 和 Struts2 的对比
- qduoj 码农必修(x或y等于x加y)
- 用python简单处理图片(3):添加水印
- python 解析 mach-o
- ProgressDialog的使用-------------范例(学习笔记)
- 基于CentOS的Cifs(samba)文件系统搭建
- 用python简单处理图片(4):图像中的像素访问
- Hello,我是疯狂早茶