Android Studio——fragment与activity跳转返回


在 Android Studio 中基于 Java 实现返回功能按键来返回上一个页面,通常有以下几种常见的方式:

从activity返回activity

1. 使用系统自带的返回键

Android 系统自带的返回键(物理返回键或虚拟返回键)默认会调用 ActivityonBackPressed() 方法。如果你没有对这个方法进行重写,点击返回键时系统会自动销毁当前 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 来管理 FragmentActivity 之间的跳转和返回。

从 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
    }
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值