Access Val во внутреннем методе - PullRequest
0 голосов
/ 28 ноября 2018

У меня следующий код:

val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container)
                as SearchFragment? ?: searchFragment.also {
            addFragmentToActivity(it, R.id.fragment_container)

            search_view.setOnQueryTextListener(object : android.widget.SearchView.OnQueryTextListener {
                override fun onQueryTextSubmit(query: String): Boolean {
                    fragment.searchViewClicked(query)
                    return true
                }

                override fun onQueryTextChange(query: String): Boolean {
                    if (query.isEmpty()) {
                        fragment.clearList()
                    } else {
                        fragment.searchViewClicked(query)
                    }
                    return true
                }
            })

Как видите, я хочу получить доступ к переменной fragment в onQueryTextSubmit и onQueryTextChange.Но с текущим кодом я получаю unresolved reference ошибку на фрагменте.

Не могли бы вы дать мне знать, как мне исправить код?

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018

Сделайте объект фрагмента переменной класса, подобной этой

private val fragment = FragmenLogin()

или используйте инициализацию lateinit

private lateinit var fragment: FragmentLogin

, тогда вы можете использовать объект фрагмента в любом месте класса (после его инициализации)

Подробнее о латинитах см. https://stackoverflow.com/a/36623703/5057663

0 голосов
/ 29 ноября 2018

Вместо:

val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container)
                as SearchFragment? ?: searchFragment.also {
            addFragmentToActivity(it, R.id.fragment_container)
            ...
}

Я должен использовать:

val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container)
                    as SearchFragment? ?: searchFragment.also {
                addFragmentToActivity(it, R.id.fragment_container)
             }
    ... // Continue of code
0 голосов
/ 28 ноября 2018
Фрагмент

используется в его операторе присваивания.то есть фрагмент не существует, пока назначение не закончено.разделите объявление / назначение и использование по отдельности, что должно исправить код.

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