Android 在 registerForActivityResult 中使用对象

Posted

技术标签:

【中文标题】Android 在 registerForActivityResult 中使用对象【英文标题】:Android use object in registerForActivityResult 【发布时间】:2021-09-18 22:39:16 【问题描述】:

在我的AppCompatActivity 中,我声明了一个ActivityResultLauncher。我使用registerForActivityResult() 创建它并为ActivityResultCallback 传递了LambdaExpression

但是,我需要在此 ActivityResultCallback 中引用一个对象,我在调用 launch() 时拥有该对象。

示例代码:

private final ActivityResultLauncher<Intent> launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> 
    object.doSomething();
);

method() 
    Object object = new Object();
    launcher.launch(new Intent(MainActivity.this, OtherActivity.class));

我可以将对象保存在 private 字段中,但这是 android 想要我们做的吗?

我了解 Android 不希望您在不同的活动之间共享对象。但是在这里,参考应该只保留在我的MainActivity.class中。

感谢任何帮助!

【问题讨论】:

【参考方案1】:

我可以将对象保存在私有字段中,但这是 Android 想要我们做的吗?

是的,几乎是的。查看documentation中的片段:

registerForActivityResult() 在创建片段或活动之前可以安全调用,允许在为返回的ActivityResultLauncher 实例声明成员变量时直接使用它。

所以看起来ActivityResultCallback 应该引用声明的实例变量,所以你确实

可以将对象保存在私有字段中

这样就好了。对该对象的引用将是private,显然它只存在于您的MainActivity 中。

【讨论】:

谢谢你,很高兴知道我总是按预期去做。

以上是关于Android 在 registerForActivityResult 中使用对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android中启动JAVA程序

android中怎么设置组件在LinearLayout中居中

如何在android源代码中打印出日志

求教怎么在android的Logcat中输出日志

如何在Android中取得当前进程名

skia项目运行在Android.4.2,Android 4.2和Android 2.2有区别吗?