Activity是Android中非常重要的一个组件,在开发过程中经常需要进行页面的跳转和传递数据。本文将详细介绍Activity的四种跳转方式以及返回值的处理方法,并举例说明。
一、Activity的四种跳转方式
1. startActivity()
startActivity()是最常用的Activity跳转方式,它用来启动一个新的Activity,并将控制权交给新的Activity。
Intent intent = new Intent(this, TargetActivity.class);
startActivity(intent);
2. startActivityForResult()
startActivityForResult()方法也是启动一个新的Activity,不同的是,它会等待目标Activity返回结果后再返回调用Activity。在目标Activity中,使用setResult()将结果返回给调用Activity。
//在源Activity中跳转
Intent intent = new Intent(this, TargetActivity.class);
startActivityForResult(intent, 1);
//在目标Activity中返回结果
Intent intent = new Intent();
intent.putExtra("result", "success");
setResult(RESULT_OK, intent);
finish();
通过重写调用Activity中的onActivityResult()方法,可以获取到目标Activity返回的结果。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == RESULT_OK) {
String result = data.getStringExtra("result");
Toast.makeText(this, "返回结果:" + result, Toast.LENGTH_SHORT).show();
}
}
3. startActivityWithTransition()
startActivityWithTransition()方法用来启动一个新的Activity,并提供一个过渡动画。需要注意的是,这个方法只支持API 16及以上的版本。
if(Build.VERSION.SDK_INT >= 16){
ActivityOptions options = ActivityOptions.makeScaleUpAnimation(view,0,0,view.getWidth(),view.getHeight());
Intent intent = new Intent(this, TargetActivity.class);
startActivity(intent,options.toBundle());
}
else{
startActivity(new Intent(this, TargetActivity.class));
}
4. startActivityIfNeeded()
startActivityIfNeeded()方法用来判断是否需要启动一个新的Activity。如果当前已经有一个该Activity的实例存在,则不需要再启动一个新的Activity,反之则需要。
Intent intent = new Intent(this, TargetActivity.class);
startActivityIfNeeded(intent, 0);
二、Activity的返回值处理
1. setResult()方法
在目标Activity中使用setResult()方法设置返回值,并调用finish()方法结束目标Activity。
//在目标Activity中返回结果
Intent intent = new Intent();
intent.putExtra("result", "success");
setResult(RESULT_OK, intent);
finish();
2. onActivityResult()方法
重写调用Activity中的onActivityResult()方法,获取目标Activity返回的结果。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == RESULT_OK) {
String result = data.getStringExtra("result");
Toast.makeText(this, "返回结果:" + result, Toast.LENGTH_SHORT).show();
}
}
3. setResult()和onActivityResult()方法配合使用
在目标Activity中设置返回值,并调用finish()方法结束目标Activity。在调用Activity中重写onActivityResult()方法,根据requestCode和resultCode判断返回值是否正确,并获取数据。
//在目标Activity中返回结果
Intent intent = new Intent();
intent.putExtra("result", "success");
setResult(RESULT_OK, intent);
finish();
//在调用Activity中获取结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == RESULT_OK) {
String result = data.getStringExtra("result");
Toast.makeText(this, "返回结果:" + result, Toast.LENGTH_SHORT).show();
}
}
4. setResult()和finish()方法配合使用
在目标Activity中设置返回值,并直接调用finish()方法结束目标Activity。在调用Activity中重写onActivityResult()方法,根据resultCode判断返回值是否正确,并获取数据。
//在目标Activity中返回结果并结束Activity
Intent intent = new Intent();
intent.putExtra("result", "success");
setResult(RESULT_OK, intent);
finish();
//在调用Activity中获取结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
String result = data.getStringExtra("result");
Toast.makeText(this, "返回结果:" + result, Toast.LENGTH_SHORT).show();
}
}
三、举例说明
1.使用startActivity()跳转Activity
//在MainActivity中跳转至SecondActivity
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
2.使用startActivityForResult()跳转Activity并获取返回值
//在MainActivity中跳转至SecondActivity
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(intent, 1);
//在SecondActivity中返回结果
Intent intent = new Intent();
intent.putExtra("result", "success");
setResult(RESULT_OK, intent);
finish();
//在MainActivity中获取返回值
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == RESULT_OK) {
String result = data.getStringExtra("result");
Toast.makeText(this, "返回结果:" + result, Toast.LENGTH_SHORT).show();
}
}
3.使用startActivityIfNeeded()判断是否需要跳转Activity
//在MainActivity中判断是否需要跳转至SecondActivity
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivityIfNeeded(intent, 0);
四、总结
本文介绍了四种Activity的跳转方式和返回值处理方法,并提供具体代码示例,为开发者提供了更好的实现逻辑和使用场景。在实际开发中,需要根据具体需求选择合适的跳转方式,并注意处理返回值,以保证功能的完整性和稳定性。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/
发表评论 取消回复