可编辑为字符串的Kotlin edittext不返回任何内容

时间:2018-01-23 11:36:44

标签: android kotlin

有没有人经历过这个?

我正在尝试从editText获取输入值。我做了以下。

val input = edittext_input.text.toString()

但结果却一无所获。我尝试记录edittext_input.text并且它有一个值。你们知道为什么会这样吗?这是kotlin的一个错误吗?

我找到的一个解决方法就是这个。

val input = "${edittext_input.text}"

更新 实际完整代码:

private fun setupUI() {

    val inputTestText = (findViewById<EditText>(R.id.edittext_username)).text
    val inputTestTextToString: String = 100.toString()

    val userInput: String = edittext_username.text.toString()
    val passInput = "${edittext_password.text}"

    findViewById<Button>(R.id.button_login).setOnClickListener {

        Log.i(TAG, "inputTestText is null? ${inputTestText == null}")
        Log.i(TAG, "inputTestTextToString: $inputTestTextToString")

        Log.i(TAG, "A user: $userInput password: $passInput")
        Log.i(TAG, "B user: ${edittext_username.text} password: ${edittext_password.text}")

    }
}

结果:

inputTestText is null? false
inputTestTextToString: 100
A user:  password:
B user: test password: test

2 个答案:

答案 0 :(得分:2)

您在onClickListener之前分配值,

val inputTestText = (findViewById<EditText>(R.id.edittext_username)).text
val inputTestTextToString: String = 100.toString()

val userInput: String = edittext_username.text.toString()
val passInput = "${edittext_password.text}"

在按钮单击侦听器中打印值

这里,变量得到空值,因为最初没有文本。放点东西后你点击按钮就会显示空值。而${edittext_username.text}就是你从edittext字段中获取值。

您只需将赋值行放在onClickListener中。

最终代码应为,

findViewById<Button>(R.id.button_login).setOnClickListener {

    val userInput: String = edittext_username.text.toString()
    val passInput = "${edittext_password.text}"
    //put above two line here

    Log.i(TAG, "inputTestText is null? ${inputTestText == null}")
    Log.i(TAG, "inputTestTextToString: $inputTestTextToString")

    Log.i(TAG, "A user: $userInput password: $passInput")
    Log.i(TAG, "B user: ${edittext_username.text} password: ${edittext_password.text}")

}

答案 1 :(得分:-1)

下面 - 使用来自ko​​tlin-activity的编辑文本的示例 你可能不是在活动中初始化edittext吗?

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="toast" />

    <EditText
        android:layout_centerHorizontal="true"
        android:id="@+id/edittext"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:hint="hint text"/>
</RelativeLayout>

活动

import android.app.Activity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.Toast

class MainActivity : Activity() {
    lateinit var button: Button
    lateinit var edittext: EditText
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        edittext = findViewById(R.id.edittext)
        button = findViewById(R.id.button1)
        button.setOnClickListener {
            val input = edittext.text.toString()
            Toast.makeText(this, input, Toast.LENGTH_LONG).show()
        }
    }
}

修改

代码: 变量(&#39; inputTestText&#39 ;,&#39; userInput&#39);#34&是本onCLickListener之前进行初始化,因此,当按下该按钮时,变量已经存在,和它们等于&#34 ;

&#39; $ {edittext_username.text}&#39; &#39; $ {} edittext_password.text&#39; - 这些不是变量,因此在单击按钮时会获取数据。