在Kotlin中,覆盖方法没有被调用。

问题描述 投票:0回答:1

我在我的基础片段中使用了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()))
    }
android-fragments kotlin fragment overriding
1个回答
0
投票

有一大堆代码你没有给我们看,但我想你想做的是在 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 {
© www.soinside.com 2019 - 2024. All rights reserved.