先新建好两个Activity分别命名为 AActivity
和 BActivity
显式跳转和隐式跳转
显式跳转:
示例代码1:(一般采用这种方法)
mBtnJump.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//显示1
Intent intent = new Intent(AActivity.this,BActivity.class);
startActivity(intent);
}
});
示例代码2:
mBtnJump.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//显示跳转2
Intent intent = new Intent();
intent.setClass(AActivity.this,BActivity.class);
startActivity(intent);
}
});
示例代码3:
mBtnJump.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//显示跳转3
Intent intent = new Intent();
intent.setClassName(AActivity.this,"com.example.myapplication.jump.BActivity");
startActivity(intent);
}
});
示例代码4:
mBtnJump.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//显示跳转4
Intent intent = new Intent();
intent.setComponent(new ComponentName(AActivity.this,"com.example.myapplication.jump.BActivity"));
startActivity(intent);
}
});
隐式跳转:
在 AndroidManifest.xml
中设置 BActivity
的 </intent-filter>
属性如下:
<activity android:name=".jump.BActivity"
android:label="B">
<intent-filter>
<action android:name="com.example.test.BActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
然后在 AActivity.java
中进行隐式跳转的代码编写:其中 setAction
的内容就是在 AndroidManifest.xml
中设置 BActivity
的 </intent-filter>
中的 action
:
mBtnJump.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//隐式跳转1
Intent intent = new Intent();
intent.setAction("com.example.test.BActivity");
startActivity(intent);
}
});
Activity之间的数据传递
在 AActivity
中, bundle
里面放了一些数据,然后把 bundle
放到 intent
中去:
mBtnJump.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//显示1
Intent intent = new Intent(AActivity.this,BActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name","布丁");
bundle.putInt("number",44);
intent.putExtras(bundle);
startActivity(intent);
}
});
这样 AActivity
就带着 intent
, intent
中带着数据就传送到了 BActivity
中。
BActivity
如何接受数据?在 BActivity.java
中的 onCreate
函数中添加:
mTvTitle=findViewById(R.id.tv_title);
Bundle bundle = getIntent().getExtras();
String name = bundle.getString("name");
int number = bundle.getInt("number");
mTvTitle.setText(name+','+number);
AActivity通过跳转页面把数据传到的BActivity中的TextView中,这样就实现了两个Activity之间的数据传递。
startActivityForResult:启动Activity,结束后返回结果
startActivityForResult
:当从AActivity跳转到BActivity中之后,再次返回AActivity,希望从BActivity返回一些数据给AActivity,就可以通过该方法实现。
把之前的 startActivity(intent);
替换成如下代码: 其中第二个参数是请求码,可以根据请求码来判断是哪一步跳转过去的:
startActivityForResult(intent,0);
在BActivity中添加一个Button,添加一个点击事件:
mBtnFinish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
Bundle bundle1 = new Bundle();
bundle1.putString("title","我回来啦");
intent.putExtras(bundle1);
setResult(Activity.RESULT_OK,intent);
finish();
}
});
然后就回到了AActivity界面。
这时候AActivity如何接受BActivity返回的数据?使用 onActivityResult
这个方法。
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Toast.makeText(AActivity.this,data.getExtras().getString("title"),Toast.LENGTH_LONG).show();
}
这时从BActivity返回AActivity的时候,会弹出一个Toast显示“我回来啦”