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

Android开发中如何获取Dialog内TextInputEditText的输入文本

问题根因

你当前的核心问题是getInput()方法中每次调用都会重新inflate一个全新的布局实例,这个新实例和当前显示在Dialog上的布局完全是两个不同的对象,你从新实例里取到的自然是初始的空字符串。

修复方案

步骤1:缓存Dialog使用的布局视图

修改onCreateDialog()方法,先把inflate出来的布局实例存为类成员变量,后续取输入的时候直接用这个实例查找控件:

// 类内增加成员变量,缓存Dialog绑定的布局视图
private lateinit var dialogView: View

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    return activity?.let {
        val builder = androidx.appcompat.app.AlertDialog.Builder(it)
        val inflater = requireActivity().layoutInflater
        // 先inflate布局,存到成员变量里
        dialogView = inflater.inflate(R.layout.dialog_add_vpn_tunnel, null)
        builder.setView(dialogView)
            .setPositiveButton(R.string.add_vpn_tunnel,
                DialogInterface.OnClickListener { dialog, id ->
                    addVpn()
                })
            .setNegativeButton(R.string.cancel,
                DialogInterface.OnClickListener { dialog, id ->
                    getDialog()?.cancel()
                })
        builder.create()
    } ?: throw IllegalStateException("Activity cannot be null")
}

步骤2:修改getInput()方法,从缓存的布局实例中取输入

不要再重新inflate布局,直接用之前存的dialogView查找控件:

private fun getInput(): String {
    val inputEt = dialogView.findViewById<TextInputEditText>(R.id.input_add_tunnel)
    return inputEt.text?.toString()?.trim() ?: ""
}

可选:修复addVpn()里存储计数的逻辑错误

你当前的计数更新逻辑是无效的,count?.plus(1)不会修改原来的count值,也没有把新的计数存回SharedPreferences,修改如下:

private fun addVpn() {
    val sp = activity?.getPreferences(AppCompatActivity.MODE_PRIVATE) ?: return
    // 初始值建议用0,更符合计数逻辑,避免出现tunnel-1这类不符合预期的key
    val count = sp.getInt("countTunnels", 0)
    val inputAddTunnel = getInput()
    if(inputAddTunnel.isNotEmpty()) {
        sp.edit()
            .putString("tunnel$count", inputAddTunnel)
            .putInt("countTunnels", count + 1) // 同步更新计数到SharedPreferences
            .apply()
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:18:03