startActivityForResult()被弃用,来试试ActivityResultAPI
(2023-06-20 11:31:15)分类: androidios |
https://blog.csdn.net/weixin_51906150/article/details/126589820?utm_source=miniapp_weixin
startActivityForResult被弃用,来试试Activity Result API
startActivityForResult()的使用
1.
通过startActivityForResult()在MainAcitivity向SecondActivity请求数据
2. 在SecondActivity中响应请求发送数据
3. 在MainActivity的在onActivityResult()方法中去解析SecondActivity返回的结果
使用Activity Result API
1.**在app下的build.gradle中加入依赖:**
2.**定义协议**
3.**注册协议,获取启动器-ActivityResultLauncher**
4.**调用启动器的launch方法开启界面跳转**
Contract协议说明
简化一下预定义的Contract使用吧
1.在MainActivity中定义启动器
2.运行启动器
startActivityForResult()用于两个活动之间交换信息,今天用到的时候发现这个方法已经被弃用了。
image-20220829115100882
效果图是这样子滴
8.29
了解到大家原来都已经用起了Activity Result API,今天把它拿下!
先来回顾一下startActivityForResult的使用
startActivityForResult()的使用
1. 通过startActivityForResult()在MainAcitivity向SecondActivity请求数据
Intent intent1 = new Intent(MainActivity.this, SecondActivity.class);
intent1.putExtra("come","来自活动一的数据");//给SecondActivity传送数据
startActivityForResult(intent1, 1);//向SecondActivity请求数据,并且进行跳转
2. 在SecondActivity中响应请求发送数据
通过getIntent()和getStringExtra获得来自MainActivity的数据,实现两个活动的交流。
Intent intent = getIntent();
String s = intent.getStringExtra("come");
用setResult()方法设置要返回给MainActivity的数据。
Intent intent2 = new Intent(SecondActivity.this, MainActivity.class);
intent2.putExtra("return", "活动二返回的数据");
setResult(RESULT_OK, intent2);
finish();
1
2
3
4
3. 在MainActivity的在onActivityResult()方法中去解析SecondActivity返回的结果
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
switch
(requestCode) {
case 1:
if (resultCode == RESULT_OK) {
String returnedDate = data.getStringExtra("return");
Log.e(TAG, returnedDate);
}
break;
default:
}
super.onActivityResult(requestCode, resultCode, data);
}
看得出来确实,一旦活动和数据多一些,onActivityResult就会变得臃肿耦合,resultcode也要不断进行扩充定义。
现在官方推荐使用Activity Result API代替startActivityForResult()方法
那这个要怎么用呢
使用Activity Result API
1.在app下的build.gradle中加入依赖:
implementation 'androidx.activity:activity:1.2.0-beta01'
implementation 'androidx.fragment:fragment:1.3.0-beta01'
2.定义协议
在MainAcitivity中新建一个 ResultContract类继承于ActivityResultContract,I是输入的数据类型,O是输出的数据类型。在下面的例子里两个活动的数据都定义为String。
我们在createIntent的方法里放入MainActivity传送给SecondActivity的数据,在parseResult里取出SecondActivity传回来的数据。
class ResultContract extends ActivityResultContract {
@NonNull
@Override
startActivityForResult()用于两个活动之间交换信息,今天用到的时候发现这个方法已经被弃用了。
image-20220829115100882
效果图是这样子滴
8.29
了解到大家原来都已经用起了Activity Result API,今天把它拿下!
先来回顾一下startActivityForResult的使用
startActivityForResult()的使用
1. 通过startActivityForResult()在MainAcitivity向SecondActivity请求数据
Intent intent1 = new Intent(MainActivity.this, SecondActivity.class);
intent1.putExtra("come","来自活动一的数据");//给SecondActivity传送数据
startActivityForResult(intent1, 1);//向SecondActivity请求数据,并且进行跳转
2. 在SecondActivity中响应请求发送数据
通过getIntent()和getStringExtra获得来自MainActivity的数据,实现两个活动的交流。
Intent intent = getIntent();
String s = intent.getStringExtra("come");
用setResult()方法设置要返回给MainActivity的数据。
Intent intent2 = new Intent(SecondActivity.this, MainActivity.class);
intent2.putExtra("return", "活动二返回的数据");
setResult(RESULT_OK, intent2);
finish();
3. 在MainActivity的在onActivityResult()方法中去解析SecondActivity返回的结果
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
}
看得出来确实,一旦活动和数据多一些,onActivityResult就会变得臃肿耦合,resultcode也要不断进行扩充定义。
现在官方推荐使用Activity Result API代替startActivityForResult()方法
那这个要怎么用呢
使用Activity Result API
1.在app下的build.gradle中加入依赖:
implementation 'androidx.activity:activity:1.2.0-beta01'
implementation 'androidx.fragment:fragment:1.3.0-beta01'
2.定义协议
在MainAcitivity中新建一个 ResultContract类继承于ActivityResultContract,I是输入的数据类型,O是输出的数据类型。在下面的例子里两个活动的数据都定义为String。
我们在createIntent的方法里放入MainActivity传送给SecondActivity的数据,在parseResult里取出SecondActivity传回来的数据。
class ResultContract extends ActivityResultContract {