我无法从此类内的对象调用类的函数。 我该怎么办?
class LoginActivity: AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
}
private fun disableLoginButton(){
button_login.isEnabled = false
}
private object textChangeListener: 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) {
//Here i cannot call function
disableLoginButton() // unresolved reference.
}
}
}
但是当我呼叫LoginActivity().disableLoginButton()
而不是disableLoginButton()
时,它是可见的,但失败
NullPointerException
在login_button
答案 0 :(得分:2)
尝试一下:
class LoginActivity: AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
editTextSample.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable) {}
override fun beforeTextChanged(s: CharSequence, start: Int,
count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence, start: Int,
before: Int, count: Int) {
disableLoginButton()
}
})
}
}
private fun disableLoginButton(){
button_login.isEnabled = false
}
答案 1 :(得分:0)
编辑:无效
在Java和Kotlin中,“内部”表示“捕获外部实例”,其中“嵌套”表示仅在其他内部声明。 Java的静态类仅是嵌套的,非静态的嵌套类是内部的。在Kotlin中,您必须将某些内容明确声明为“内部”(我们颠倒了Java的约定)。因此,您的对象不是内部对象,只是嵌套。实际上,没有命名对象可以在内部:命名对象是单例,因此不能依赖任何外部实例。
尝试将对象指定为内部对象
private inner object textChangeListener: 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 {
//Here i cannot call function
disableLoginButton() // unresolved reference.
}
}
这应该允许您访问外部范围。