android基础笔记----Activity的启动与之间的信息传递
2016-09-24 18:03
633 查看
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传递
@Override public 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之间传递数据(bitmap和map对象)
- 【Android零基础开发001】Activity启动与多个Activity之间的切换
- Android基础 -- Activity之间传递数据(bitmap和map对象)
- Android笔记Fragment与Activity之间传递数据
- Android手机开发:Intent和在Activity之间传递信息
- Android基础 -- Activity之间传递数据(bitmap和map对象)
- Android笔记(四) Activity之间的数据传递
- 【Android开发小记--1】Activity之间传递信息
- 【Android基础】利用Intent在Activity之间传递数据
- Android基础学习笔记-Activity开启与数据传递
- Android笔记三.不同Activity之间的传递数据(Bundle对象的使用)
- Android-onActivityResult。Activity之间如何传递信息?
- Android基础知识_Activity之间传递参数
- 【Android基础】Activity之间进行参数传递的三种方式
- Android基础 -- Activity之间传递数据(bitmap和map对象)
- Android 笔记-Fragment 与 Activity之间传递数据
- 【android基础】之intent传递数组[应用于activity之间传递图片参数等]
- Android 笔记-Fragment 与 Activity之间传递数据
- byte数组和流 Seralizable:Android基础 -- Activity之间传递数据(bitmap和map对象)
- 【Android基础】利用Intent在Activity之间传递数据