我应该在片段/活动中还是在视图模型中编写此代码?

问题描述 投票:1回答:2

我是Android MVVM的新手,因此我需要执行图像裁剪并请求访问图像库的权限,而我困惑于应在片段中还是在视图模型中执行这些操作。

开始为我使用此代码的设备上保存的预先获取图像进行裁剪活动

    CropImage.activity(selectedImagePosterFromGalleryUri)
        .setGuidelines(CropImageView.Guidelines.ON)
        .setRequestedSize(posterMaxWidthSize, posterMaxHeightSize, CropImageView.RequestSizeOptions.RESIZE_INSIDE)
        .start(mContext, this)

onActivityResult时可以在我的片段的requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE中访问此代码的结果(裁剪的图像)>

如果将其视为用户输入,我会感到困惑,因此可以将这段代码放在片段中,或者将其视为逻辑/进程,以便将其放置在viewmodel中?

并且我还需要请求访问画廊的权限,请允许我使用一个库,并且代码将如下所示。我必须放入片段或视图模型吗?

    @AfterPermissionGranted(PERMISSION_READ_EXTERNAL_STORAGE)
    private fun checkPermission() {


        if (EasyPermissions.hasPermissions(mContext, Manifest.permission.READ_EXTERNAL_STORAGE)) {


            chooseImageFromGallery()

        } else {

            EasyPermissions.requestPermissions(
                this,
                "we need your permission to access your gallery",
                PERMISSION_READ_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE)
        }



    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)

        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
    }

    override fun onPermissionsDenied(requestCode: Int, perms: MutableList<String>) {

        if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {

            // showing app setting, so the user eventually can switch the permission manually in the setting section
            AppSettingsDialog.Builder(this).build().show()
        }

    }

    override fun onPermissionsGranted(requestCode: Int, perms: MutableList<String>) {


    }

让我感到困惑的是从这里https://developer.android.com/jetpack/docs/guide这句话,说:

在“活动”或“分段。这些基于UI的类应仅包含以下逻辑:处理UI和操作系统的交互。

如果将裁剪图像和访问画廊视为处理UI和操作系统交互的逻辑,我感到困惑

我真的不明白选择代码应该在视图模型中还是在视图中(片段/活动)。对于业务逻辑,很明显应该在viewmodel中,但是这些代码呢?请帮助

我是Android MVVM的新手,因此我需要执行图像裁剪并请求访问图像库的权限,而我困惑这些操作应该在片段中还是在视图模型中执行。到...

android kotlin android-architecture-components android-jetpack android-viewmodel
2个回答
0
投票

根据Google家伙,


0
投票

您应将其放在ViewModel中,并传递函数所需的必要参数。

© www.soinside.com 2019 - 2024. All rights reserved.