显示启动
Intent it = new Intent(this, DialogActivity.class);
startActivity(it);
启动当前应用里普通的Activity。
隐式启动
隐式启动的传参方式是相当灵活的,在编译期间不会发生错误,可以打开很多不属于该应用的Activity(系统Activity)。
隐式启动系统Activity
//参数1:action,是Activity的别名
//参数2:Uri对象,打开的路径,通过协议来具体确定打开什么Activity
Intent it = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.imooc.com"));
startActivity(it);
隐式启动普通Activity
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="abc" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Intent it = new Intent("abc");
startActivity(it);
startActivityForResult
有返回值的调用Activity
第一个Activity
class LearnActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_learn)
val it2 = Intent(this, LearnActivity2::class.java)
//参数1:intent
//参数2:requestCode:用来区别该结果是来自于哪个Activity
startActivityForResult(it2, 1000)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
// resultCode: 0 RESULT_CANCEL 取消
// resultCode: -1 RESULT_OK 正确处理完后返回
Log.e("Tag", "resultCode$requestCode")
}
}
第二个Activity
class LearnActivity2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_learn2)
// 设置结果
val it = Intent() //此时的意图不作为跳转界面使用,而是用来传递数据
it.putExtra("myMsg", "message")
//参数1:结果码,在上一个界面的onActivityResult方法中通过resultCode获取
//参数2:意图对象,主要作用:放数据,在上一个界面的onActivityResult中通过data的获取
setResult(RESULT_OK, it)
finish()
}
}