我正在创建一条祝wine 词.当您输入错误的信息时,这个祝wine 词就会出现,但当我快速输入并再次输入正确的数据时,祝wine 词消息会继续出现在新页面上.

我不想写LENGTH_SHORT,因为男人需要能够轻松地阅读消息

我为它写了一个扩展,但它对我不起作用

private fun Context.toastCreate(): Toast {
    return Toast(this)
}

fun Context.showError(message: String) {
    val inflater = LayoutInflater.from(this)
    val layout: View = inflater.inflate(R.layout.custom_toast_layout, null)
    val text = layout.findViewById<TextView>(R.id.text)
    text.text = message
    val toast = toastCreate()
    toast.duration = Toast.LENGTH_LONG
    toast.view = layout
    toast.show()
}

fun Context.cancelError() {
    this.toastCreate().cancel()
}

推荐答案

我认为您当前的方法不起作用,因为您的Context.toastCreate()总是返回一个新的Toast实例.因此,在ancelError()函数中,您创建了一个新Toast并立即将其取消.但这不会影响当前显示的Toast.
要取消Toast,需要在当前显示的Toast实例上调用cancel()函数.

您可以将上次创建的 cogo toast 存储在变量中:

private var currentToast: Toast? = null
private fun Context.toastCreate(): Toast {
    var newToast = Toast(this)
    currentToast = newToast
    return newToast
}

然后在启动新活动时调用此Toast实例上的Cancel方法:

startActivity(...)
currentToast?.cancel()

有关带有扩展功能的Toast功能的完整实现,请参阅this StackOverflow answer.

Android相关问答推荐

在Android Studio Iguana 2023.2.1中,哪里可以找到能量分析器?

如何使TextField的背景透明?

合成 colored颜色 的GSON反序列化

list 合并失败,AGP 8.3.0

穿戴与iPhone连接的安卓操作系统

如何检测低性能 Android 设备进行条件动画渲染?

使用 List 和 LazyColumn 重新组合所有项目

如何在我的sqlite数据库中获取某个玩家的分数

是什么导致调用 Firebase 服务器?

任务 ':app:kaptGenerateStubsDebugKotlin' 执行失败

CoroutineScope 与挂起函数

如何在没有人窃取令牌的情况下使用我的移动应用程序中的 API

如何像 XML 一样在 Compose Android Studio 中折叠/展开小部件代码区域/区域

compose 更改列表元素但lazyColumn不更改

组合 - 重新组合图像

Google Play 控制台您的应用是否使用广告 ID?

如何删除 Ktor 客户端 2.0.0 的默认标头

使用 Jetpack Compose 的深层链接导航到可组合项

在 android-billing-5.0 中获取 ProductDetails 价格

在 Android 10 (API 29) 中隐藏状态栏并在应用程序中使用其空间