0

我正在使用合同 ActivityResultContracts.TakePicturePreview() 来捕获一个小图像。

private val cameraLauncher =
        registerForActivityResult(ActivityResultContracts.TakePicturePreview()) { bitmap ->
                view?.findViewById<ImageView>(R.id.imageOutput)?.setImageBitmap(bitmap)
        }

当我尝试启动 Activity for Result 时,我意识到这个合约需要一个 Void!对象作为输入。因此,我可以启动此活动的唯一方法是将“null”作为参数传递,我认为这不是很漂亮。

cameraLauncher.launch(null)

我试过传递“Nothing”、“Unit”,但类型不匹配。

这样做的正确方法是什么?

该函数的标题将是

public void launch(Void input)
4

1 回答 1

3

根据 Java 文档,

Void 类是一个不可实例化的占位符类,用于保存对表示 Java 关键字的 Class 对象的引用void

因为无法实例化 Void 类,所以您可以传递给具有 Void 类型参数的方法的唯一值是null.

甚至首先需要这样做的原因是因为所有的 ActivityContracts 都从基类继承,该基abstract class ActivityResultContract<I, O>类期望输入 ( I) 和输出 ( O) 有两种数据类型。由于TakePicturePreview不需要任何输入,它Void?只是用来弥补这一点。

现在来回答,

这样做的正确方法是什么?

传球null是正确的(也是唯一的)方式。

于 2021-11-21T16:03:32.440 回答