【问题标题】:How to use OnClickListener for items in AlertDialog Kotlin?如何对 AlertDialog Kotlin 中的项目使用 OnClickListener?
【发布时间】:2021-10-02 12:19:29
【问题描述】:

所以我得到了这个关于 AlertDialog 的 java 代码:

AlertDialog.Builder builder= new AlertDialog.Builder(context:this);
builder.setTitle("Pick Image")
     .setItems(options, new DialogInterface.OnClickListener(){
          @Override
          public void onClick(DialogInterface dialog, int which){
            if(which==0){
             if(checkCameraPermission())pickFromcamera();
             else requestCameraPermission(); 
            } else{
              if(checkStoragePermission()) pickFromGallery();
              else requestStoragePermission();
             }
    }
}

我尝试在我的 Kotlin 项目中使用它,所以我对其进行了一些更改。我的代码如下:

val options: Array<String> = arrayOf("Kamera","Gallery")
        val builder= AlertDialog.Builder(this)
        builder.setTitle("Pilih Gambar")
            .setItems(options,DialogInterface.OnClickListener(){
                @Override
                fun onClick(dialog: DialogInterface, which: Int){
                    if(which==0){
                        if(checkCameraPermission()){
                            pickFromCamera()
                        }
                        else{
                            requestCameraPermission()
                        }
                    }
                    else{
                        if(checkStoragePermission()){
                            pickFromGallery()
                        }
                        else{
                            requestStoragePermission()
                        }
                    }
                }
            })
            .show()

但我在 setItems 中收到此错误: Expected 2 parameters of types DialogInterface!, Int。为什么会这样?我做错了什么?

【问题讨论】:

    标签: kotlin android-camera android-alertdialog android-storage


    【解决方案1】:

    您将 Java 与 Kotlin 结合在一起。假设您尝试在 Kotlin 中执行此操作,请尝试在 lambda 中使用您的逻辑编写它。

        val options: Array<String> = arrayOf("Kamera","Gallery")
            val builder= AlertDialog.Builder(requireContext())
            builder.setTitle("Pilih Gambar").setItems(options) { dialog, which ->
                if(which==0){
                        if(checkCameraPermission()){
                            pickFromCamera()
                        }
                        else{
                            requestCameraPermission()
                        }
                    }
                    else{
                        if(checkStoragePermission()){
                            pickFromGallery()
                        }
                        else{
                            requestStoragePermission()
                        }
                    }
            }
            .show()
    

    【讨论】:

    • 那么,我在 setItems 中使用 OnClickListener?对于对话框,它不需要包含数据类型?
    • 不确定你的意思,但为了清楚起见,我从你的原始代码中添加了逻辑
    • 我明白了,原来我的错误在于将 java 迁移到 kotlin。谢谢你的回答
    猜你喜欢
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多