一、介绍 当我们在第一个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()方法。
背景 在Android应用程序开发中,启动一个Activity不一定是单项操作,从启动的Activity获取数据是常见的场景,最传统的方式是通过Intent携带数据,然后使用startActivityForResult...方法来启动下一个Activity,然后通过onActivityResult来接收返回的结果,代码如下: 调用startActivityForResult方法启动 startActivityForResult...最后,调用启动器的launch方法开启界面跳转 MainActivity中添加一个Button,点击Button时,调用launch方法跳转: button.setOnClickListener {...因为,使用生命周期组件,LifecycleOwner 会在 Lifecycle 被销毁时自动移除已注册的启动器。...另外,startActivityForResult和onActivityResult已经被废弃,官方也是强烈建议使用这种方式来进行数据传递并获取Activity返回的数据。
一个需求:一个activity到另一个activity进行一些设置,返回第一个activity的时候 获取第二个activity设置的数据 百度了一下,发现startActivityForResult这个很完美的符合了我的效果要求...()动作或者back动作后,将设置的值回传给第一个页面,从而第一个页面来显示所得到的值。...这个有一点像回调方法,就是在第二个页面finish()动作或者back动作后,会回调第一个页面的onActivityResult()方法。...请求码的作用 使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,我们需要为startActivityForResult...结果码的作用 在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面Activity
btn = (Button) findViewById(R.id.button); fv+Tab快捷键 获取Activity当前rootView View rootView = getWindow()...Intent intent = new Intent(MainActivity.this, NextActivity.class); intent.putExtra("name", "ted"); startActivityForResult...intent.getStringExtra("name"); Log.d(TAG, "onCreate: " + name); Intent backdata = new Intent(); backdata.putExtra("back...方法 * * requestCode 请求码,即调用startActivityForResult()传递过去的值 * resultCode 结果码,结果码用于标识返回数据来自哪个新Activity...onActivityResult(int requestCode, int resultCode, Intent data) { String result = data.getStringExtra("back
如何启动一个新的 Activity,并获取返回值? 你的答案肯定是 startActivityForResult 和 onActivityResult 。...(Activity.RESULT_OK, Intent().putExtra("value","I am back !"))...这两个能力放到启动 Activity 中就很好理解了,createIntent 负责为 startActivityForResult 提供 Intent ,parseResult 负责处理 onActivityResult...所以,除了可以简化 startActivityForResult ,权限请求,拨打电话,拍照,都可以通过 Activity Result API 得到了简化。...大致流程就是,自动生成 requestCode,注册回调并存储起来,绑定生命周期,当收到 Lifecycle.Event.ON_DESTROY 事件时,自动解绑注册。
在firstactivity 活动中 使用startActivityForResult 第一个参数是 intent 第二个参数是请求码启动Activity FirstActivity.class...Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivityForResult(intent, 1...button1 = (Button) findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener()...@Override public void onClick(View view) { Intent intent = new Intent(); // 给上一个Activity...TAG, "onActivityResult: "+returnedData); } break; default: } } 如果按back
Lifecycle Activity的生命周期图 ?...If the user then presses the Back button, the first activity is restarted....> 启动另一个Activity之后默认返回的结果码是RESULT_CANCELED,此外,我们没有必要查看Activity是通过startActivity()还是通过startActivityForResult...()启动的,只需要设置结果即可,如果是通过startActivityForResult()启动的Activity的话,系统会将结果传递给原来的Activity,否则结果就会被忽略。...If the originating activity had called startActivityForResult(), then the system delivers it the result
之间的数据回传 问题:MainActivity怎么接收SecondActivity回传的数据 1:MainActivity做处理 (1)startActivityForResult Button...取到的值如果为空,默认为0 2:SecondActivity做处理 在SecondActivity的xml中在定义一个Button控件 Button android:id="@+id/...btn_back" android:layout_width="match_parent" android:layout_height="wrap_content"...parent" app:layout_constraintStart_toStartOf="parent"/> (1)setResult findViewById(R.id.btn_back...() 作用:启动一个 Activity 并获取其返回结果 ActivityResultContracts 是一个包含多种预定义合约(Contract)的工具类,StartActivityForResult
startActivityForResult(Intent intent, int requestCode):以指定的请求码(requestCode)启动Activity,而且程序将会获取新启动的Activity...finishActivity(int requestCode):结束以 startActivityForResult(Intent intent, int requestCode)方法启动的 Activity...="wrap_content" android:text="返回"/> Button android:id="@+id/back_close_btn"...); // 获取应用程序中的返回按钮 Button backBtn = (Button) findViewById(R.id.back_btn); /.../ 获取应用程序中的返回关闭按钮 Button backCloseBtn = (Button) findViewById(R.id.back_close_btn); //
启动 Activity ; void startActivityForResult(@RequiresPermission Intent intent, int requestCode) 方法最终也是调用...done when a result is requested because // that guarantees we will get information back...startActivityForResult(intent, -1); } } public void startActivityForResult(@RequiresPermission...done when a result is requested because // that guarantees we will get information back...); // 获取按钮 , 并未按钮组件设置点击事件 Button button = findViewById(R.id.button); button.setOnClickListener
背景 在项目开发中,发现startActivityForResult和onActivityResult方法已经被废弃了,这是为什么呢?有代码强迫症的我开始了研究。...获取数据,传统的方式是使用startActivityForResult方法来启动下一个Activity,然后通过onActivityResult方法来接收返回的结果。...:1.3.0-alpha02 中,已经废弃了startActivityForResult和onActivityResult方法。...Lifecycle lifecycle = lifecycleOwner.getLifecycle(); LifecycleEventObserver observer = new LifecycleEventObserver...是时候跟startActivityForResult方法说再见了,新的Activity Results API,小伙伴们快快用起来吧。
在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这个事件里处理的返回。
intent.setClass(HongtenActivity.this, MainActivity.class); 37 intent.putExtra("back...(RESULT_CODE, intent); 41 // 结束HongtenActivity类,返回到MainActivity类, 42 //并且把名字为"back"参数的字符串传递到...17 //startActivity(intent); 18 startActivityForResult(intent, REQUEST_CODE); 19...时, 31 //都调用了startActivityForResult()方法,那么我们的程序就 32 //不知道是那个Button了,但是有了这样的判断,程序就能清楚的知道是那个Button...37 Bundle bundle=data.getExtras(); 38 String text=bundle.getString("back
1、示例代码: Intent intent = new Intent(); intent.setAction("com.steven.android06lifecycle.nextactivity");...startActivity(intent); //在配置文件中注册Activity的时候需要声明: activity android:name="com.steven.android06lifecycle.NextActivity..."> lifecycle.nextactivity" /> <category android...ACTION_GET_CONTENT ); intent.setType( "image/*" ); Intent wrapperIntent = Intent.createChooser(intent, null); startActivityForResult...amr" ); intent.setClassName("com.android.soundrecorder","com.android.soundrecorder.SoundRecorder"); startActivityForResult
Intent对象可以传递给startActivity() 或startActivityForResult()方法来启动一个activity,或让一个已经存在的Activity去做其他任务。...Intent也可以作为Activity.setResult() 的参数,返回给调用了startActivityForResult()的Activity。...=”android:intent:action.VIEW”/> C 回调函数 MainActivity: final int CODE = 0x717; startActivityForResult... } } RegisterActivity: Button...bn =(Button)findViewById(R.id.back); bn.setOnClickListener(newOnClickListener(){
1.3.0-alpha04 更新 API 更改 首先我们介绍一下 API 更改 startActivityForResult()/onActivityResult() 和 requestPermissions...onRequestPermissionsResult() 弃用 prepareCall() 重命名为 registerForActivityResult() target fragment API 被弃用 Activity...Result API 上位 由于官方提供了 「Activity Result API」 来替换 「onActivityResult」 机制,因此 fragment 的 startActivityForResult...()/onActivityResult() 和 requestPermissions()/onRequestPermissionsResult() 方法被标记弃用了 「Activity Result API...lifecycle = lifecycleOwner.getLifecycle(); if (lifecycle.getCurrentState() == Lifecycle.State.DESTROYED
image.png startActivityForResult startActivityForResult与startActivity类似都是用来跳转界面。...startActivityForResult可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个Text2Activity调用了...finish()方法以后,程序会自动跳转回T1Activity,并调用前一个T1Activity中的onActivityResult方法。...也就是执行startActivityForResult后可以从打开的界面,再返回到主界面去。...); button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener
我们把这个工程中创建的一个新的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
我个人的观点是,startActivityForResult()方法并没有什么致命的问题,只是Activity Result API在易用性和接口统一性方面都做得更好。...所以我刚才说了,startActivityForResult()方法并没有什么致命的问题。 那么接下来我们学习一下如何使用Activity Result API来实现同样的功能。...FirstActivity中的代码,我们需要使用Activity Result API来替代startActivityForResult()的写法,如下所示: class FirstActivity :...现在你已经知道,Activity Result API是可以完全取代startActivityForResult()方法的。...这是以前使用startActivityForResult()方法时的传统写法。 而Activity Result API是没有地方让你传入requestCode的。