Как вызвать функцию из объекта? - PullRequest
0 голосов
/ 28 января 2020

Я не могу вызвать функцию моего класса из объекта внутри этого класса. Как мне это сделать?

 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

Ответы [ 2 ]

2 голосов
/ 28 января 2020

Попробуйте это:

    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
         }
0 голосов
/ 28 января 2020

РЕДАКТИРОВАТЬ: не работает

от команды jetbrains :

In Java и Kotlin, " «внутренний» означает «захват внешнего экземпляра», где «вложенный» означает просто объявленный внутри чего-то другого. Классы Java stati c являются только вложенными, а классы non-stati c являются внутренними. В 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. 
     }
}

Это должно позволить вам получить доступ к внешней области.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...