Android Kotlin:没有为 EditText 触发 onTextChanged
Android Kotlin: onTextChanged not being triggered for EditText
我正在创建一个 EditText
框,边上有行号。为实现这一点,我在 addTextChangedListener
的 onTextChanged
方法中有代码更新 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 在我的项目中被调用。
我正在创建一个 EditText
框,边上有行号。为实现这一点,我在 addTextChangedListener
的 onTextChanged
方法中有代码更新 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 在我的项目中被调用。