Android-тост не отображается при отмене предыдущего - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть синглтон ToastUtil, который показывает тост и отменяет предыдущий тост, если он уже показан на экране.Вот мой текущий код:

object ToastUtil {

    private lateinit var mToast: Toast

    fun init(applicationContext: Context) {
        mToast = Toast.makeText(applicationContext, null, Toast.LENGTH_SHORT)
    }

    fun showShortToast(message: String) {
        mToast.cancel()
        mToast.setText(message)
        mToast.duration = Toast.LENGTH_SHORT
        mToast.show()
    }

    fun showShortToast(messageId: Int) {
        mToast.cancel()
        mToast.setText(messageId)
        mToast.duration = Toast.LENGTH_SHORT
        mToast.show()
    }
}

Но сообщения Toast не отображаются на телефоне.ToastUtil определенно инициализирован (init(applicationContext) в моей пользовательской реализации App:

class App : Application() {

    override fun onCreate() {
        super.onCreate()
        ToastUtil.init(this)
    }
}

Я пробовал https://stackoverflow.com/a/33878500/8434188 безрезультатно.Я что-то пропустил?

1 Ответ

0 голосов
/ 10 февраля 2019

Этот код теперь работает, и появляются тосты.Это также чище , так как мне не нужно инициализировать его в реализации моего приложения.

object ToastUtil {

    private var mToast: Toast? = null

    fun Context.showShortToast(message: String) {
        if (mToast != null) {
            mToast!!.cancel()
        }
        mToast = Toast.makeText(this, message, Toast.LENGTH_SHORT)
        mToast?.show()
    }

    fun Context.showShortToast(
        messageId: Int,
        vararg strings: String = arrayOf()
    ) {
        this.showShortToast(getString(messageId, strings))
    }
}
...