You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中无法从自定义Dialog获取输入文本的技术问题

解决方案

核心错误原因

XML布局中输入框的id是username(全小写),但代码中一直使用userName(驼峰命名),大小写不匹配导致无法找到对应控件,这是两种方式都失败的根本原因。

具体修复方法

方法1:修正findViewById的id匹配

将代码中的R.id.userName改为R.id.username,同时控件类型建议改为EditText(更准确,虽然EditText继承自TextView):

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    return activity?.let {
        val builder = AlertDialog.Builder(it)
        val inflater = requireActivity().layoutInflater
        val inflatedView = inflater.inflate(R.layout.dialog_create_task_type, null)
        // 修正id为username,类型改为EditText
        val userNameInput = inflatedView.findViewById<EditText>(R.id.username)

        builder.setView(inflatedView)
            .setPositiveButton("ok") { dialog, id ->
                // 获取输入框文本并回调
                listener.onDialogPositiveClick(this, userNameInput.text.toString())
                dialog.cancel()
            }
            .setNegativeButton("cancel") { dialog, id ->
                dialog.cancel()
            }
        builder.create()
    } ?: throw IllegalStateException("Activity cannot be null")
}

方法2:正确使用View Binding

  1. 确保已在模块的build.gradle中启用View Binding:
android {
    ...
    buildFeatures {
        viewBinding true
    }
}
  1. 修正Binding类引用和控件id:
    布局文件名是dialog_create_task_type.xml,对应的Binding类是DialogCreateTaskTypeBinding(不是TaskTypeLayoutBinding),控件id为username,所以用binding.username:
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    return activity?.let {
        val builder = AlertDialog.Builder(it)
        // 直接用Binding类inflate布局,无需手动调用inflater
        val binding = DialogCreateTaskTypeBinding.inflate(requireActivity().layoutInflater)

        builder.setView(binding.root)
            .setPositiveButton("ok") { dialog, id ->
                // 获取输入框文本并回调
                listener.onDialogPositiveClick(this, binding.username.text.toString())
                dialog.cancel()
            }
            .setNegativeButton("cancel") { dialog, id ->
                dialog.cancel()
            }
        builder.create()
    } ?: throw IllegalStateException("Activity cannot be null")
}

内容的提问来源于stack exchange,提问作者sara fernandes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 23:50:59