findViewById () не должен быть пустым при создании пользовательского тоста - PullRequest
0 голосов
/ 26 марта 2020

У меня есть следующая функция, которая отображает пользовательский тост

fun showCustomToast() {
        val inflater = layoutInflater
        val container: ViewGroup = findViewById(R.id.toastContainer)
        val layout: ViewGroup = inflater.inflate(R.layout.custom_toast, container) as ViewGroup
        val text: TextView = layout.findViewById(R.id.textView)
        text.text = "This is a custom toast"
        with (Toast(applicationContext)) {
            setGravity(Gravity.CENTER_VERTICAL, 0, 0)
            duration = Toast.LENGTH_LONG
            view = layout
            show()
        }
}

Я вызываю эту функцию на основной активности чуть ниже setContentView(R.layout.activity_main) При запуске приложения я получаю следующую ошибку

Caused by: java.lang.IllegalStateException:
> findViewById(R.id.toastContainer) must not be null

Что я делаю не так. , .
Я встречал это , но это не помогает

Ответы [ 2 ]

1 голос
/ 26 марта 2020
val container: ViewGroup = findViewById(R.id.toastContainer)
val layout: ViewGroup = inflater.inflate(R.layout.custom_toast, container) as ViewGroup

В ваших комментариях вы пишете toastContainer в custom_toast макете. Его нельзя найти в текущем макете (при условии, что это действие).

На самом деле вам не нужен контейнер для инфлятора, и поскольку тост еще не показывает, что реального контейнера в любом случае не будет еще. Вы можете заменить эти две строки чем-то вроде

val layout = inflater.inflate(R.layout.custom_toast, null)
1 голос
/ 26 марта 2020

Функция findViewById() будет искать представления в макете вашей активности, а не любые другие указанные c представления, которые вы могли объявить. Ваш контейнер внутри другого View?

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