如何对 AlertDialog Kotlin 中的项目使用 OnClickListener?

Posted

技术标签:

【中文标题】如何对 AlertDialog Kotlin 中的项目使用 OnClickListener?【英文标题】:How to use OnClickListener for items in AlertDialog Kotlin? 【发布时间】: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。为什么会这样?我做错了什么?

【问题讨论】:

【参考方案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。谢谢你的回答

以上是关于如何对 AlertDialog Kotlin 中的项目使用 OnClickListener?的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin:单击 RecycleView 项目时显示 AlertDialog

如何使用 Kotlin 从 Android 中的片段访问另一个片段?

如何与 Espresso 中的 alertdialog 交互?

如何从 Flutter 中的方法获取 AlertDialog 回调?

如何从字符串资源中获取 AlertDialog 中的可点击超链接?

如何摆脱 AlertDialog 中的矩形 TextView?