Android Kotlin:没有为 EditText 触发 onTextChanged

Android Kotlin: onTextChanged not being triggered for EditText

我正在创建一个 EditText 框,边上有行号。为实现这一点,我在 addTextChangedListeneronTextChanged 方法中有代码更新 EditText 的行号。然而,出于某种原因,当我输入 EditText 时,onTextChanged 事件似乎从未触发,因为 println 语句未被激活。

下面是我的 XML 代码:

<GridLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:rowCount="1"
    android:columnCount="2">

    <TextView
        android:id="@+id/linenumber"
        android:layout_width="30dp"
        android:layout_height="200dp"
        android:layout_row="0"
        android:layout_column="0"
        android:layout_columnSpan="1"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentBottom="true"
        android:background="@drawable/border_style"
        android:gravity="center_horizontal"
        android:text="1"
        android:textSize="18dp"></TextView>

    <EditText
        android:id="@+id/textbox"
        android:layout_width="0dp"
        android:layout_height="200dp"
        android:layout_row="0"
        android:layout_column="1"
        android:layout_columnSpan="1"
        android:layout_columnWeight="1"
        android:ems="5"
        android:gravity="left|top"
        android:inputType="textMultiLine"
        android:padding="10dp"
        android:text="" />
</GridLayout>

下面是我的 Kotlin 代码:

var textbox1: EditText = findViewById(R.id.textbox);
var lineNumber: TextView = findViewById(R.id.linenumber);

// Add the line numbers or remove the line numbers based on the user's input
textbox1.addTextChangedListener(object : TextWatcher {
    override fun afterTextChanged(p0: Editable?) {
    }

    override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
    }

    override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
        // Retrieve the number of lines in the user's input
        var lines:Int = lineNumber.getLineCount()
        var linesText:String = "";

        // Loop through the lines
        for (i in 1..lines) {
            linesText = linesText + "\n" + i;
        }

        println("linesText = " + linesText)
        // Update the line numbers
        lineNumber.setText(linesText);
    }
})

我能发现的唯一问题是:

var lines:Int = lineNumber.getLineCount()

这不应该是:

var lines : Int = textbox1.getLineCount()

此外,您的侦听器应添加到 onCreate() 或 onResume() 中。

我发现了这个错误,我很抱歉没有在我的 post 中包含错误所在的代码行:

在我初始化侦听器后,我有以下额外的代码行重置侦听器:

setContentView(R.layout.activity_main)

万一有人登陆这里,EditText 中的 android:textAllCaps="true" 由于某种原因阻止了 onTextChanged 在我的项目中被调用。