簡體   English   中英

在 Kotlin 中設置和讀取 EditText

[英]Setting and reading an EditText in Kotlin

我有一個簡單的問題(我希望)。

我有兩個預設值(IP 和端口),我需要應用程序用戶對其進行更改。 我在一個班級中有兩個值。

public class SoftOptions {
    var RemoteHost: String = "192.168.43.237"
    var RemotePort: Int = 1234

}

然后當然是 val mySettings = SoftOptions()。

然后我將它們作為文本字段顯示在我的 MainActivity 中。 然后,按下“設置”按鈕后,我會轉到一個名為“設置”的活動。 在其中,我將值放置在編輯框中,這樣如果只有最后一位數字發生變化,就不必更改整個 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 值很好。

所以,我的問題僅僅是,沒有從編輯框中獲取干凈的文本值,我做錯了什么?

這是我的用戶界面中的消息。 非常感謝,這個論壇是我使用過的最強大的論壇。

我的用戶界面

為了從edittext獲取文本,您必須使用edittext類的getText()方法,您可以參考此了解更多詳細信息https://developer.android.com/reference/android/widget/EditText#getText()

getText() 將返回您的 Editable,您必須在其上應用 toString() 方法,該方法將為您提供字符串中的 edittext 文本。

考慮到您的代碼有問題,您可以通過以下方式獲得它

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

改變:

   myTargetPort.toString().toInt()

到:

   myTargetPort.text.toString().toInt()

對您擁有的所有 EditText 字段執行相同操作。

edittext.toString()返回默認的 Object#toString() 實現,該實現將其地址打印為結果,而.text.toString()獲取您想要的 edittext 中的文本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM