【问题标题】:Android studio how to use getBitmap in Fragment instead of activity? Classifier 'ContentResolver' does not have a companion objectAndroid Studio 如何在 Fragment 中使用 getBitmap 而不是 Activity?分类器“ContentResolver”没有伴随对象
【发布时间】:2020-11-24 11:59:23
【问题描述】:

我正在尝试将裁剪的图像位图设置为视图中的图像视图。在 Activity 中,代码可以工作,但如何在 Fragment 中应用它?

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    var result = CropImage.getActivityResult(data)
    var uri = result.uri

    if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
        val bitmap = MediaStore.Images.Media.getBitmap(ContentResolver, uri)
        imageviewProfilePicture.setImageBitmap(bitmap)
    }

ContentResolver 报错:

分类器“ContentResolver”没有伴随对象,并且 因此必须在这里初始化

我用这个代码调用cropimage活动:

context?.let {
        CropImage.activity()
            .setGuidelines(CropImageView.Guidelines.ON)
            .setAspectRatio(1, 1)
            .start(it, this)
    };

【问题讨论】:

    标签: android kotlin fragment


    【解决方案1】:

    在您当前拥有ContentResolver 的位置使用context.contentResolver。您需要获得Context,因为Fragment(与Activity 不同)不是Context 子类。

    【讨论】:

      【解决方案2】:

      根本原因

      要使用方法getBitmap(ContentResolver, Uri),您需要传递ContentResolver 的实例。在Android中,您可以从Context类或其子类如Activity、Service、Application等中获取实例。

      Fragment 不是 Context 的子类,所以不能直接在 Fragment 内部获取实例。您可以通过宿主活动(片段附加到的活动)获取。

      解决方案

      更改您的代码

      val bitmap = MediaStore.Images.Media.getBitmap(ContentResolver, uri)
      

      val contentResolver = requireActivity().contentResolver
      val bitmap = MediaStore.Images.Media.getBitmap(contentResolver, uri)
      

      【讨论】:

        猜你喜欢
        • 2019-01-20
        • 2021-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多