在 Android Studio 中基于 Java 实现返回功能按键来返回上一个页面,通常有以下几种常见的方式:
从activity返回activity
1. 使用系统自带的返回键
Android 系统自带的返回键(物理返回键或虚拟返回键)默认会调用 Activity
的 onBackPressed()
方法。如果你没有对这个方法进行重写,点击返回键时系统会自动销毁当前 Activity
并返回到上一个 Activity
。这是最简单且默认的返回方式。
如果你需要在返回时添加一些自定义逻辑,可以重写 onBackPressed()
方法。例如:
@Override
public void onBackPressed() {
// 在这里添加自定义逻辑
super.onBackPressed(); // 调用父类方法,执行默认的返回操作
}
2. 使用 finish()方法
如果你在代码中需要主动触发返回操作,可以调用 finish()
方法来销毁当前 Activity
,从而返回到上一个 Activity
。例如:
// 在某个按钮的点击事件中调用
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish(); // 销毁当前Activity,返回到上一个Activity
}
});
3. 使用 startActivityForResult() 和 setResult()
如果你需要从一个 Activity
跳转到另一个 Activity
并获取返回结果,可以使用 startActivityForResult()
方法启动目标 Activity
。在目标 Activity
中,可以通过调用 setResult()
方法设置返回结果,然后调用 finish()
返回。
示例:
- 启动目标 Activity 并等待结果
Intent intent = new Intent(CurrentActivity.this, TargetActivity.class); startActivityForResult(intent, REQUEST_CODE); // REQUEST_CODE 是一个自定义的请求码
- 在目标 Activity 中设置返回结果
Intent returnIntent = new Intent(); returnIntent.putExtra("result", "返回的数据"); setResult(Activity.RESULT_OK, returnIntent); // 设置返回结果 finish(); // 返回到上一个Activity
- 在启动 Activity 中接收返回结果
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) { String result = data.getStringExtra("result"); // 处理返回的结果 } }
5. 自定义返回按钮
如果你需要在页面上添加一个自定义的返回按钮,可以在布局文件中定义一个按钮,并在代码中为其设置点击事件来调用 finish()
方法。例如:
<!-- 在布局文件中定义按钮 -->
<Button
android:id="@+id/backButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="返回" />
// 在Activity中设置按钮的点击事件
backButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish(); // 销毁当前Activity,返回到上一个Activity
}
});
从fragment跳转activity后返回
从 Fragment 跳转到 Activity,再从 Activity 返回到之前的 Fragment,可以通过以下几种方式实现:
1. 使用 startActivity 和 finish()
这是最简单的方式。从 Fragment 跳转到 Activity 时,使用 startActivity
,然后在 Activity 中调用 finish()
返回。
从 Fragment 跳转到 Activity
在 Fragment 中,使用 startActivity
跳转到目标 Activity:
Intent intent = new Intent(getActivity(), TargetActivity.class);
startActivity(intent);
在 Activity 中返回
在目标 Activity 中,可以通过调用 finish()
方法返回到之前的 Fragment:
// 在按钮点击事件或其他逻辑中调用
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish(); // 销毁当前Activity,返回到之前的Fragment
}
});
这种方式适用于简单的页面跳转和返回场景。
2. 使用 startActivityForResult() 和 setResult()
如果需要从 Fragment 跳转到 Activity 并获取返回结果,可以使用 startActivityForResult()
和 setResult()
。
从 Fragment 跳转到 Activity
在 Fragment 中,使用 startActivityForResult()
跳转到目标 Activity:
Intent intent = new Intent(getActivity(), TargetActivity.class);
getActivity().startActivityForResult(intent, REQUEST_CODE); // REQUEST_CODE 是自定义的请求码
在 Activity 中设置返回结果
在目标 Activity 中,设置返回结果并调用 finish()
:
Intent returnIntent = new Intent();
returnIntent.putExtra("result", "返回的数据");
setResult(Activity.RESULT_OK, returnIntent); // 设置返回结果
finish(); // 返回到之前的Fragment
在 Fragment 中接收返回结果
在 Fragment 所属的 Activity 中重写 onActivityResult()
方法,然后在 Fragment 中处理返回结果:
// 在 Fragment 所属的 Activity 中
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) {
// 将结果传递给 Fragment
YourFragment fragment = (YourFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_container);
if (fragment != null) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
}
// 在 Fragment 中
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) {
String result = data.getStringExtra("result");
// 处理返回的结果
}
}
3. 使用 Jetpack Navigation 组件
如果你的项目使用了 Jetpack Navigation 组件,可以通过 NavController
来管理页面跳转和返回。
从 Fragment 跳转到 Activity
在 Fragment 中,使用 NavController
跳转到目标 Activity:
NavController navController = Navigation.findNavController(view);
navController.navigate(R.id.action_fragment_to_activity); // action_fragment_to_activity 是在 navigation.xml 中定义的跳转动作
在 Activity 中返回
在目标 Activity 中,调用 finish()
返回到之前的 Fragment:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish(); // 返回到之前的Fragment
}
});
使用 NavHostFragment 和 NavController(适用于复杂场景)
如果你的 Activity 中嵌套了 NavHostFragment
,可以通过 NavController
来管理 Fragment 和 Activity 之间的跳转和返回。
从 Fragment 跳转到 Activity
在 Fragment 中,使用 NavController
跳转到目标 Activity:
NavController navController = Navigation.findNavController(view);
navController.navigate(R.id.action_fragment_to_activity); // action_fragment_to_activity 是在 navigation.xml 中定义的跳转动作
在 Activity 中返回
在目标 Activity 中,调用 finish()
返回到之前的 Fragment:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish(); // 返回到之前的Fragment
}
});