我在我的基础片段中使用了Textwatcher,我覆盖了子片段中的实现方法,超级方法被调用,而子片段中的覆盖方法却没有被调用。
基础片段
open fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
open fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
open fun afterTextChanged(s: Editable?) {}
protected class TextChangeListener() : TextWatcher {
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {
val fragment = BaseFragment()
fragment?.beforeTextChanged(s, start, count, after)
}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
val fragment = BaseFragment()
fragment?.onTextChanged(s, start, before, count)
}
override fun afterTextChanged(s: Editable) {
val fragment = BaseFragment()
fragment?.afterTextChanged(s)
}
}
儿童片段
mBinding!!.goalsBody.addTextChangedListener(TextChangeListener())
override fun afterTextChanged(s: Editable?) {
saveMenuItem!!.setEnabled(!TextUtils.isEmpty(mBinding!!.goalsBody.text.toString()))
}
有一大堆代码你没有给我们看,但我想你想做的是在 TextChangeListener
是。
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {
[email protected](s, start, count, after)
}
其他两个函数也是如此
为了使这个函数有效,你还需要声明 TextChangeListener
作为 一个 inner
阶层:
protected inner class TextChangeListener() : TextWatcher {