首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Activity Lifecycle:startActivityForResult并按Back Button

Activity Lifecycle:startActivityForResult 按Back Button

在 Android 开发中,startActivityForResult 是一个用于启动另一个 Activity 并向其传递数据的方法。当用户按 Back Button 时,系统会回退到上一个 Activity。在回退过程中,系统会自动调用 onPause() 方法,停止当前 Activity 的运行。

为了在按 Back Button 时执行某些操作,可以重写 onPause() 方法并添加逻辑。例如,可以在 onPause() 中保存数据或执行一些清理操作。

以下是一个示例代码,演示如何在按 Back Button 时执行某些操作:

代码语言:scss
复制
// 导入所需库
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private Button mButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mButton = findViewById(R.id.button);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 启动另一个 Activity
                startActivityForResult(new Intent(MainActivity.this, SecondActivity.class), 0);
            }
        });
    }

    @Override
    protected void onPause() {
        super.onPause();

        // 在按 Back Button 时执行操作
        if (mButton != null) {
            mButton.setText("Back");
        }
    }

    @Override
    protected void onResume() {
        super.onResume();

        // 在按 Back Button 时更新按钮文本
        if (mButton != null) {
            mButton.setText("Forward");
        }
    }
}

在上述代码中,我们实现了两个按钮,一个用于启动另一个 Activity,一个用于在按 Back Button 时执行操作。在 onPause() 方法中,我们检查 mButton 是否为 null,如果是,则说明没有按钮正在被点击,因此我们可以执行一些清理操作。在按 Back Button 时,系统会调用 onPause() 方法,因此我们可以在这里更新按钮的文本。在 onResume() 方法中,我们检查 mButton 是否为 null,如果是,则说明按钮已经被点击,因此我们可以更新按钮的文本。

注意,在按 Back Button 时,系统只会调用 onPause() 方法,而不会调用 onStop() 方法。因此,如果需要在按 Back Button 时执行一些清理操作,可以在 onPause() 方法中执行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android startActivityForResult用法

一、介绍 当我们在第一个Activity打开第二个Activity时,第二个Activity关闭并想返回数据给第一个Activity时,我们就可以使用startActivityForResult进行传值...用到的几个方法介绍: 1. startActivityForResult(Intent intent, int requestCode) requestCode:如果> = 0,当Activity...二、示例 1、使用系统提供的startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,为了得到传回的数据,必须在Activity...onClick里面实现/直接按Back键返回,需要重写onBackPressed方法 setResult()方法的第一个参数值可以根据业务需要自己定义,上面代码中使用到的RESULT_OK是系统Activity...跳转到另一个Activity后,Activity在其finish()动作或者back动作后,会回调主Activity的onActivityResult()方法。

35820

你好,Activity Results API!

背景 在Android应用程序开发中,启动一个Activity不一定是单项操作,从启动的Activity获取数据是常见的场景,最传统的方式是通过Intent携带数据,然后使用startActivityForResult...方法来启动下一个Activity,然后通过onActivityResult来接收返回的结果,代码如下: 调用startActivityForResult方法启动 startActivityForResult...最后,调用启动器的launch方法开启界面跳转 MainActivity中添加一个Button,点击Button时,调用launch方法跳转: button.setOnClickListener {...因为,使用生命周期组件,LifecycleOwner 会在 Lifecycle 被销毁时自动移除已注册的启动器。...另外,startActivityForResult和onActivityResult已经被废弃,官方也是强烈建议使用这种方式来进行数据传递并获取Activity返回的数据。

1.8K20
  • 你好,Activity Results API!

    背景 在Android应用程序开发中,启动一个Activity不一定是单项操作,从启动的Activity获取数据是常见的场景,最传统的方式是通过Intent携带数据,然后使用startActivityForResult...方法来启动下一个Activity,然后通过onActivityResult来接收返回的结果,代码如下: 调用startActivityForResult方法启动 startActivityForResult...最后,调用启动器的launch方法开启界面跳转 MainActivity中添加一个Button,点击Button时,调用launch方法跳转: button.setOnClickListener {...因为,使用生命周期组件,LifecycleOwner 会在 Lifecycle 被销毁时自动移除已注册的启动器。...另外,startActivityForResult和onActivityResult已经被废弃,官方也是强烈建议使用这种方式来进行数据传递并获取Activity返回的数据。

    1.6K40

    安卓开发_startActivityForResult的详细用法

    一个需求:一个activity到另一个activity进行一些设置,返回第一个activity的时候 获取第二个activity设置的数据 百度了一下,发现startActivityForResult这个很完美的符合了我的效果要求...()动作或者back动作后,将设置的值回传给第一个页面,从而第一个页面来显示所得到的值。...这个有一点像回调方法,就是在第二个页面finish()动作或者back动作后,会回调第一个页面的onActivityResult()方法。...请求码的作用     使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,我们需要为startActivityForResult...结果码的作用 在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面Activity

    88960

    Jetpack:使用 ActivityResult 处理 Activity 之间的数据通信

    在Android中,我们如果想在Activity之间双向传递数据,需要使用startActivityForResult启动,然后在onActivityResult中处理返回,另外申请权限也是类似的步骤。...在Jetpack提供的已封装好的ActivityResultContract有(都是ActivityResultContracts的子类): (1)StartActivityForResult public...> 最简单的,相当于传统方式的startActivityForResult,只不过将onActivityResult的几个参数封装成一个ActivityResult public ActivityResult...lifecycle = lifecycleOwner.getLifecycle(); if (lifecycle.getCurrentState().isAtLeast(Lifecycle.State.STARTED...往下可以看到是通过lifecycle这个功能实现的,为启动的context(如activity)添加一个Observer,在Observer中发现是在onStart这个事件里处理的返回。

    1.1K30

    Android开发之Activity的创建跳转及传值

    我们把这个工程中创建的一个新的Activity,然后再有Hello World中添加一个按钮,点击按钮跳转到我们创建的新的Activity中。在新的按钮中点击Back返回到上一个Activity中。...intent.putExtra("extra_data", data); (3) 在新的Activity中我们需要获取传过来的值显示在TextView上,并且点击一个Back按钮返回到上一层Activity...点击SecondActivity中的Back按钮就会执行finish()方法返回上一个Activity。 ? 2....(1)跳转时通过startActivityForResult()方法来进行值得回传,第一个参数就是intent对象,第二个参数是requestCode(请求码)。...Button backButton = (Button) findViewById(R.id.third_back_button); backButton.setOnClickListener

    3.2K100

    Android startActivityForResult和setResult的区别

    Android startActivityForResult和setResult的区别 startActivityForResult与startActivity的不同之处在于: 1、startActivity...2、startActivityForResult( ) 可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个Text2Activity...的setResult()在什么时候调用(重点也是难点) 如果在startActivityForResult起来的Activity里面设置setResult,结果并不会马上返回给parent的Activity...键从一个Activity退出来的,一按BACK,android就会自动调用Activity的finish()方法,然后设置resultCode为RESULT_CANCELED,也就不会返回任何数据了 ....解决方法就是在Activity里面捕获按BACK的事件,捕获到之后先setResult,然后自己来调用finish,就搞定了……把BACK事件直接自己给吞了 @Override public void

    1.4K31

    Activity Result API详解,是时候放弃startActivityForResult了「建议收藏」

    我个人的观点是,startActivityForResult()方法并没有什么致命的问题,只是Activity Result API在易用性和接口统一性方面都做得更好。...所以我刚才说了,startActivityForResult()方法并没有什么致命的问题。 那么接下来我们学习一下如何使用Activity Result API来实现同样的功能。...FirstActivity中的代码,我们需要使用Activity Result API来替代startActivityForResult()的写法,如下所示: class FirstActivity :...现在你已经知道,Activity Result API是可以完全取代startActivityForResult()方法的。...这是以前使用startActivityForResult()方法时的传统写法。 而Activity Result API是没有地方让你传入requestCode的。

    91330
    领券