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 中使用对象的主要内容,如果未能解决你的问题,请参考以下文章