在 Kotlin 中设置和读取 EditText
Setting and reading an EditText in Kotlin
我有一个简单的问题(我希望)。
我有两个预设值(IP 和端口)需要应用程序用户能够更改。我在 class.
中有两个值
public class SoftOptions {
var RemoteHost: String = "192.168.43.237"
var RemotePort: Int = 1234
}
然后当然是 val mySettings = SoftOptions()。
然后我将它们显示在我的 MainActivity 中作为文本字段。然后,在按下“设置”按钮后,我转到名为“设置”的 activity。在其中,我将值放在编辑框中,这样如果只有最后一位数字发生变化,就不必更改整个 IP 地址。这个我也搞定了。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
var editEnterip = mySettings.RemoteHost
var editEnterport= mySettings.RemotePort
setContentView(R.layout.activity_settings)
this.editEnterip.setText(mySettings.RemoteHost.toString())
this.editEnterport.setText(mySettings.RemotePort.toString())
但是,在按钮侦听器中,我只需要读取新值并将其分配给 mySettings.RemoteHost 和 mySettings.RemotePort 变量。
btnSetip.setOnClickListener {
var finalIP =findViewById<EditText>(R.id.editEnterip)
Toast.makeText(this, finalIP.toString(), Toast.LENGTH_SHORT).show()
myTargetIP = finalIP.toString()
mySettings.RemoteHost = finalIP.toString()
editEnterport = editEnterport . toString () .toInt()
myTargetPort = "$editEnterport"
mySettings.RemotePort = myTargetPort.toString().toInt()
val intent = Intent(this, MainActivity::class.java)
intent.putExtra("myTargetIP", myTargetPort)
intent.putExtra("myTargetPort", myTargetPort)
startActivity(intent)
}
但是,这虽然不会导致应用程序崩溃,但会将可怕的错误消息作为远程主机的值,即使编辑后的 IP 值没问题。
所以,我的问题只是,我做错了什么,没有从编辑框中获取干净的文本值?
这是我的用户界面中的消息。非常感谢,这个论坛是我使用过的最强大的论坛。
My user interface
变化:
myTargetPort.toString().toInt()
至:
myTargetPort.text.toString().toInt()
对您拥有的所有 EditText 字段执行相同的操作。
edittext.toString()
returns 默认的 Object#toString() 实现打印其地址作为结果,而 .text.toString()
根据需要获取编辑文本中的文本
为了从 edittext 中获取文本,您必须使用 edittext 的 getText() 方法 class 您可以参考此以获取更多详细信息 https://developer.android.com/reference/android/widget/EditText#getText()
getText() 将比 return 您必须应用 toString() 方法的 Editable,该方法将为您提供字符串中的编辑文本文本。
考虑到您的问题代码,您可以通过以下方式获取它
var finalIP =findViewById<EditText>(R.id.editEnterip)
var textFromEditText = finalIP.text.toString() // access text this way
println(textFromEditText)
由于您使用的是 kotlin,因此无需编写完整的 getText(),这要归功于它的 属性 访问语法,您可以参考此处了解更多详细信息 https://kotlinlang.org/docs/reference/properties.html
我有一个简单的问题(我希望)。
我有两个预设值(IP 和端口)需要应用程序用户能够更改。我在 class.
中有两个值public class SoftOptions {
var RemoteHost: String = "192.168.43.237"
var RemotePort: Int = 1234
}
然后当然是 val mySettings = SoftOptions()。
然后我将它们显示在我的 MainActivity 中作为文本字段。然后,在按下“设置”按钮后,我转到名为“设置”的 activity。在其中,我将值放在编辑框中,这样如果只有最后一位数字发生变化,就不必更改整个 IP 地址。这个我也搞定了。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
var editEnterip = mySettings.RemoteHost
var editEnterport= mySettings.RemotePort
setContentView(R.layout.activity_settings)
this.editEnterip.setText(mySettings.RemoteHost.toString())
this.editEnterport.setText(mySettings.RemotePort.toString())
但是,在按钮侦听器中,我只需要读取新值并将其分配给 mySettings.RemoteHost 和 mySettings.RemotePort 变量。
btnSetip.setOnClickListener {
var finalIP =findViewById<EditText>(R.id.editEnterip)
Toast.makeText(this, finalIP.toString(), Toast.LENGTH_SHORT).show()
myTargetIP = finalIP.toString()
mySettings.RemoteHost = finalIP.toString()
editEnterport = editEnterport . toString () .toInt()
myTargetPort = "$editEnterport"
mySettings.RemotePort = myTargetPort.toString().toInt()
val intent = Intent(this, MainActivity::class.java)
intent.putExtra("myTargetIP", myTargetPort)
intent.putExtra("myTargetPort", myTargetPort)
startActivity(intent)
}
但是,这虽然不会导致应用程序崩溃,但会将可怕的错误消息作为远程主机的值,即使编辑后的 IP 值没问题。
所以,我的问题只是,我做错了什么,没有从编辑框中获取干净的文本值?
这是我的用户界面中的消息。非常感谢,这个论坛是我使用过的最强大的论坛。
My user interface
变化:
myTargetPort.toString().toInt()
至:
myTargetPort.text.toString().toInt()
对您拥有的所有 EditText 字段执行相同的操作。
edittext.toString()
returns 默认的 Object#toString() 实现打印其地址作为结果,而 .text.toString()
根据需要获取编辑文本中的文本
为了从 edittext 中获取文本,您必须使用 edittext 的 getText() 方法 class 您可以参考此以获取更多详细信息 https://developer.android.com/reference/android/widget/EditText#getText()
getText() 将比 return 您必须应用 toString() 方法的 Editable,该方法将为您提供字符串中的编辑文本文本。
考虑到您的问题代码,您可以通过以下方式获取它
var finalIP =findViewById<EditText>(R.id.editEnterip)
var textFromEditText = finalIP.text.toString() // access text this way
println(textFromEditText)
由于您使用的是 kotlin,因此无需编写完整的 getText(),这要归功于它的 属性 访问语法,您可以参考此处了解更多详细信息 https://kotlinlang.org/docs/reference/properties.html