Mud*_*dar 79
我的解决方案是在活动中初始化单个Toast.然后在每次单击时更改其文本.
Toast mToast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
if (a) {
mToast.setText("This is a");
mToast.show();
} else if (b) {
mToast.setText("This is b");
mToast.show();
}
Run Code Online (Sandbox Code Playgroud)
Com*_*are 31
如何禁用当前正在处理的所有Toast消息?
您可以Toasts通过调用cancel()该Toast对象来取消个人.AFAIK,你没有办法取消所有杰出的Toasts,但是.
Jus*_*ler 12
检查吐司是否已经显示怎么样?
private Toast toast;
...
void showToast() {
if (toast == null || toast.getView().getWindowVisibility() != View.VISIBLE) {
toast = Toast.makeText(getActivity(), "Toast!", Toast.LENGTH_LONG);
toast.show();
}
}
Run Code Online (Sandbox Code Playgroud)
Mudar的解决方案对我来说在一个类似的问题上工作得非常漂亮 - 经过多次button点击后,我在待办事项中堆积了各种各样的祝酒词.
一个Toast with different setText()s和show()s的实例就是我正在寻找的答案 - 一旦点击一个新按钮就会取消上一条消息.发现
仅供参考,这是我做的......
在OnCreate:
final Toast myToast = Toast.makeText(getBaseContext(), "", Toast.LENGTH_SHORT);
Run Code Online (Sandbox Code Playgroud)
每个内部OnClick:
myToast.setText(R.string.toast1);
myToast.show();
Run Code Online (Sandbox Code Playgroud)
Kotlin Version通过Extension Function取消先前显示Toast并立即显示新显示的最佳方法是保留对当前显示的引用Toast,以便能够取消它。因此,使用这些扩展函数确实有帮助:
import android.content.Context\nimport android.widget.Toast\nimport androidx.annotation.StringRes\n\n/**\n * @author aminography\n */\n\nprivate var toast: Toast? = null\n\nfun Context.toast(message: CharSequence?) {\n toast?.cancel()\n toast = message?.let { Toast.makeText(this, it, Toast.LENGTH_SHORT) }?.apply { show() }\n}\n\nfun Context.longToast(message: CharSequence?) {\n toast?.cancel()\n toast = message?.let { Toast.makeText(this, it, Toast.LENGTH_LONG) }?.apply { show() }\n}\n\nfun Context.toast(@StringRes message: Int) {\n toast?.cancel()\n toast = Toast.makeText(this, message, Toast.LENGTH_SHORT).apply { show() }\n}\n\nfun Context.longToast(@StringRes message: Int) {\n toast?.cancel()\n toast = Toast.makeText(this, message, Toast.LENGTH_LONG).apply { show() }\n}\nRun Code Online (Sandbox Code Playgroud)\n context.toast("Text 1")\ncontext.longToast("Text 2")\n\ncontext.toast(R.string.text3)\ncontext.longToast(R.string.text4)\nRun Code Online (Sandbox Code Playgroud)\n
我的解决方案是将所有 toast 引用保存在一个列表中,并在需要时创建一个方法来取消所有引用:
private ArrayList<Toast> msjsToast = new ArrayList<Toast>();
private void killAllToast(){
for(Toast t:msjsToast){
if(t!=null) {
t.cancel();
}
}
msjsToast.clear();
}
Run Code Online (Sandbox Code Playgroud)
当您创建 Toast 时,请这样做并保存参考:
Toast t = Toast.makeText(context, "Download error: xx", Toast.LENGTH_LONG);
t.show();
msjsToast.addToast(t);
Run Code Online (Sandbox Code Playgroud)
当您需要删除它们时:
killAllToast();
Run Code Online (Sandbox Code Playgroud)
您可以像在全局类中创建静态方法一样创建它,并使用它来终止应用程序的所有 toast。
这是我对这个问题的简单回答:
首先在您的活动中创建一个全局Toast对象。
private Toast example;
Run Code Online (Sandbox Code Playgroud)
现在,每当您想调用新的 Toast 消息时,只需执行以下操作:
if(buttonClicked) {
example.cancel();
example = Toast.makeText(this, "" , Toast.LENGTH_SHORT);
example.setText("Button Clicked");
example.show();
}
Run Code Online (Sandbox Code Playgroud)
这会将所有 Toast 保留在一个中央 Toast 中,并删除 Toast 垃圾邮件。这是一个快速粗略的解决方案,因此也许有一种更优雅的方法来做到这一点。
| 归档时间: |
|
| 查看次数: |
47046 次 |
| 最近记录: |