本文共 4138 字,大约阅读时间需要 13 分钟。
虽然在android sdk中,有很多方法可以通过Intent开始一个activity。
比如:public void startActivity( intent)
public void startActivity( intent, options)
public void startActivities([] intents)
public void startActivities([] intents, options)
public void startIntentSender( intent, fillInIntent,int flagsMask,int flagsValues,int extraFlags)
public void startIntentSender( intent, fillInIntent,int flagsMask,int flagsValues,int extraFlags, options)
public boolean startActivityIfNeeded( intent,int requestCode)
public boolean startActivityIfNeeded( intent,int requestCode, options)
public boolean startNextMatchingActivity( intent)
public boolean startNextMatchingActivity( intent, options)
public void startActivityFromChild( child intent,int requestCode)
public void startActivityFromChild( child, intent,int requestCode, options)
public void startActivityFromFragment( fragment, intent,int requestCode)
public void startActivityFromFragment( fragment, intent,int requestCode, options)
public void startIntentSenderFromChild( child, intent,int requestCode, fillInIntent,int flagsMask,int flagsValues,int extraFlags)
1.startActivity();
1.显示调用。通过指明ComponentName,显示调用Activity,若
Intent intent = new Intent(CustomerService.this, DetailInfo.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
//setFlags()方法,是定义打开一个新Activity的task堆栈的方式。就是以什么方式在已有的activity上加载一个新的。这将关系到加载的activity怎么样back。
//同时setFlags还有别的作用。待以后考究。<br style=" />这种用法需要注意的是在AndroidManifest.xml声明一下Activity,
否则将报throws if there was no Activity found to run the given Inten
上面的android:launch有四种方法:
Activity一共有以下四种launchMode:
1.standard
2.singleTop
3.singleTask
4.singleInstance
2.隐式调用,只需要指明ACTION就可以了,若
Intent intent = new Intent("com.android.customerservice.ACTION"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
这种用法在AndroidManifest.xml声明Activity需要在intent-filter中添加该ACTION
<activity android:name="CustomerService"
需要注意的是,自定义的ACTION不能加在android.intent.action.MAIN所在的intent-filter中,必须添加在一个新的intent-filter中,同时必须设置category android:name="android.intent.category.DEFAULT,
否则将报throws if there was no Activity found to run the given Inten
2.startActivityForResult()
原有的界面需要从新界面取得某些数据,这时需要用到startActivityForResult,比如说从activity1跳转到activity2,边看代码边说用法吧: activity1的代码片段:这是跳转到activity2 Intent intent = new Intent(Activity1.this, Activity2.class); startActivityForResult(intent, GET_CODE); 这里的GET_CODE是int型,值随意定,用途在后面讲 activity2的代码片段,这是当activity2的任务完成后返回时的代码 setResult(RESULT_OK, (new Intent()).setAction("Corky!")); finish(); 当activity2在finish之后,activity1会接收到消息,系统会调用activity1中的onActivityResult方法: protected void onActivityResult(int requestCode, int resultCode,Intent data) { if (requestCode == GET_CODE) { //do something if (resultCode == RESULT_CANCELED) { //do something } else { //do something } } } 注意这里的GET_CODE要与上面代码中的GET_CODE对应起来,用途大概已经明白了,就是说activity1可能会跳转到很多不同的界面来获得信息,那么怎么区分呢,就用这个GET_CODE,我们这里只有一个。参数中的resultCode的值是由activity2中的setResult的第一个参数决定的,data则为可选参数,可以传递更多的信息。 startActivityForResult(Intent intent, Int requestCode) intent 传给B的,不解释,看不懂你还是玩玩手机算了,别想开发的事情了 requestCode >=0就好,随便用于在onActivityResult()区别哪个子模块回传的数据,如果还有C.java ,D甚至E子模块的话,每个区分开不同的requestCode就好。 setResut(int resultCode, Intent intent) resultCode 如果B子模块可能有几种不同的结果返回,可以用这个参数予以识别区分。这里还有个特殊的 RESULT_OK 值,没有特殊情况用它就好了,sdk有说明的,呵。然后可以finish()。 intent 继续不解释,传回给A的onActivityResult() onActivityResult(int requestCode, int resultCode, Intent intent) 这里三个都不用解释了,与上文对应的东西。如果不对requestCode和resultCode 加以识别区分的话,只要有其他activity setResult到了A onActivityResult()会无差别处理。
转载地址:http://mkegi.baihongyu.com/