如何对 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 回调?