我有一个简单的问题(我希望)。
我有两个预设值(IP 和端口),我需要应用程序用户能够更改它们。我在一个类中有两个值。
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
最佳答案
为了从 edittext 获取文本,您必须使用 edittext 类的 getText() 方法,您可以引用此以获得更多详细信息 https://developer.android.com/reference/android/widget/EditText#getText()
getText() 将返回您 Editable ,您必须在其上应用 toString() 方法,该方法将为您提供字符串中的 editext 文本。
考虑到您有问题的代码,您可以通过以下方式获取它
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
关于android - 在 Kotlin 中设置和读取 EditText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60744131/