Android中Intent和Activity跳转
Android Intent
Android应用程序由Activity、Service、Content、Bordercast Receiver 和Content Provider等组件组成。
除了Content Provider外,Activity、Service和Bordercast Receiver这些组件之间的调用都是通过Intent实现的。
Intent是一种消息机制,通过将Intent对象传递给Context.startActivity()方法或Activity.startActivityForResult()方法启动一个本地Service对象,如被传递给Context.bindService()则连接一个远程Service对象。传递给Context.sendBroadcast()等方法调用Broadcast Receiver。
显示Intent(Explicit Intent)
通过指定目标组件名字,寻找目标组件 ,一般应用与调用程序和目标组件在同一个应用中。
隐式Intent(Implicit Intent)
通过指定Intent Filter寻找目标组件,一般情况下调用程序与目标组件不在同一个应用中。
隐式Intent请求没有指定目标组件的类名,它是通过Intent Filter对象告诉调用者如何能够昭告匹配的目标组件规则
隐式Intent需要在AndroidManifest.xml中注册Intent Filter
<activity android:name=".LoginActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Intent Filter: IntentFilter对象描述目标组件如何响应隐式Intent。
尝试同时在AndroidManifest.xml中设置两个Intent Filter
Activity之间的跳转
也适合于 Service和 Broadcast Receiver目标组件。多个组件之间数据传递是通过 Intent实现的, Intent在组件之间传递数据主要使用 Intent的 Extras字段。
Intent对象有很多的 putExtrad(…)方法,通过“ key-value”对的方式把数据放置到 Extras对象中。下面的语句是将 userid控件的内容,按照 userid键放入到 Intent对象的 Extras中。
Activity1:
Intent it = new Intent(Activity1.this,Activity2.class);
it.putExtra("userid", userid.getText().toString());
startActivity(it);
Activity2:
Bundle bundle = this.getIntent().getExtras();
String userid = bundle.getString("userid");
上面讲述的两个 Activity跳转都是第一个 Activity调用 startActivity()方法启动第二个Activity,然后在第二个 Activity调用 Context. finish方法实现返回到第一个 Activity。
跳转与返回
有的时候业务需求很复杂,从第二个 Activity返回到第一个 Activity时,需要再次处理某些事情就要使用 startActivityForResult()方法启动第二个 Activity了,并在第一个 Activity中重写onActivityResult()方法。