本文介绍了如何使用Intent在Activity之间显示/隐式的跳转、传值等。
使用显示Intent跳转Activity
首先我们在原活动的布局文件定义一个跳转按钮:
然后在原活动逻辑代码中去编写如下代码:
// 获取到按钮组件
Button button1 = findViewById(R.id.b1);
// 然后这里是为button1绑定了监听器
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, Activity2.class);
startActivity(intent);
}
}
即实现了点击按钮b1从MainActivity跳转到Activity2。
使用隐式Intent实现Activity跳转
(原Activity布局文件同上)
隐式跳转其实就是通过我们在manifests中注册的一些活动的信息来确定我们要跳转到的是哪个活动。所以首先我们为目标活动添加一些注册的信息
<activity
android:name=".Activity2"
android:exported="false">
<meta-data
android:name="android.app.lib_name"
android:value="" />
<intent-filter>
<action android:name="action_start"></action>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</activity>
其中的<action android:name="action_start"></action>
<category android:name="android.intent.category.DEFAULT"></category>可以暂时理解为活动添加了两个标识。
然后将原活动逻辑代码改为:
// 获取到按钮组件
Button button1 = findViewById(R.id.b1);
// 然后这里是为button1绑定了监听器
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent1 = new Intent("action_start");
startActivity(intent1);
}
}
即不直接指出我要从谁跳转到谁了,而是告诉它我要跳转到有“action_start”这个标识的活动,这样也就实现了Intent的隐式跳转。
使用Intent在Activity之间跳转并传递数据
首先在原活动逻辑代码的onCreate方法中添加如下代码:
Intent intent = new Intent(MainActivity.this, Activity2.class);
intent.putExtra("extra_data", "我是从原活动(MainActivity)跳转到目标活动(Activity2)的数据");
startActivity(intent);
上述代码第一行是定义意图和指定跳转目标,第二行向intent中存入要传递的信息(第一个参数为建,第二个参数为值),第三行是触发跳转。
然后在目标活动的onCreate方法中直接添加如下代码:
Intent intent = getIntent(); // 获取跳转到该活动时使用的intent
String s = intent.getStringExtra("extra_data"); // 通过键值获取到传递过来的信息
Log.i("RWZ", "onCreate: " + s); // 然后我们可以通过日志打印出来
这样就实现了在跳转时向跳转目标传递信息。
使用Intent在跳转到目标活动后返回时接收目标活动传来的信息
首先在原程序逻辑代码中实现跳转:
Intent intent = new Intent(MainActivity.this, Activity2.class);
startActivityForResult(intent, 1);
上述代码第二行的方法表示需要接受目标活动返回信息的跳转模式,参数1:跳转意图,参数2:请求码(接受信息时有用,当我们跳转的关系比较多时,它可用来标识是从哪个Activity返回的)。
然后在目标程序逻辑代码中重写一个方法:
@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("result_extra_data", "我是从Activity2返回的信息");
setResult(RESULT_OK, intent);
finish();
}
重写的这个方法是点击Back是触发的一个方法,代码第四行向intent存入键和值;第五行的setResult方法的第一个参数标识返回值正常,一般只使用RESULT_OK或RESULT_CANCELED这两个值,第二个参数即要返回的intent;第6行代码是销毁当前Activity。
最后我们还要在原程序中去重写一个方法来接受目标活动传回来的信息:
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
String s = data.getStringExtra("result_extra_data");
Log.i("RWZ", "onActivityResult: " + s);
}
break;
default:
}
}
这里就用到了requestCode来去分辨是从哪个Activity传回来的信息,然后判断返回信息的状态,最后通过键获取到返回的信息。
Intent的基本使用就介绍到这里,谢谢观看!