广告
返回顶部
首页 > 资讯 > 移动开发 >Android中使用Toast.cancel()方法优化toast内容显示的解决方法
  • 347
分享到

Android中使用Toast.cancel()方法优化toast内容显示的解决方法

cancel方法toastAndroid 2022-06-06 10:06:40 347人浏览 独家记忆
摘要

产品在测试过程中发现一个bug,就是测试人员不停的疯狂的点击某个按钮,触发了toast以后,toast内容会一直排着队的显示出来,不能很快的消失。这样可能会影响用户的使用。 看

产品在测试过程中发现一个bug,就是测试人员不停的疯狂的点击某个按钮,触发了toast以后,toast内容会一直排着队的显示出来,不能很快的消失。这样可能会影响用户的使用。

看到Toast有一个cancel()方法:
代码如下:
void cancel()
Close the view if it's showing, or don't show it if it isn't showing yet.

程序员的,基本一看api就知道,用这个可以取消上一个toast的显示,然后显示下一个,这样就能解决出现的问题。可是在测试的过程中,发现却没有想象中的那么简单,不信可以百度一下,很多很多人发现toast的cancel()方法不起作用。还是不讲具体过程,只讲结果吧。

我把toast做成了一个应用类,方便使用,大家可以直接用:
代码如下:
package com.arui.framework.Android.util; 
import android.content.Context; 
import android.os.Handler; 
import android.os.Looper; 
import android.widget.Toast; 

代码如下:
  
public class ToastUtil { 
    private static Handler handler = new Handler(Looper.getMainLooper()); 
    private static Toast toast = null; 
    private static Object synObj = new Object(); 
    public static void showMessage(final Context act, final String msg) { 
        showMessage(act, msg, Toast.LENGTH_SHORT); 
    } 
    public static void showMessage(final Context act, final int msg) { 
        showMessage(act, msg, Toast.LENGTH_SHORT); 
    } 
    public static void showMessage(final Context act, final String msg, 
            final int len) { 
        new Thread(new Runnable() { 
            public void run() { 
                handler.post(new Runnable() { 
                    @Override 
                    public void run() { 
                        synchronized (synObj) { 
                            if (toast != null) { 
                                toast.cancel(); 
                                toast.setText(msg); 
                                toast.setDuration(len); 
                            } else { 
                                toast = Toast.makeText(act, msg, len); 
                            } 
                            toast.show(); 
                      &n bsp; } 
                    } 
                }); 
            } 
        }).start(); 
    } 
 
    public static void showMessage(final Context act, final int msg, 
            final int len) { 
        new Thread(new Runnable() { 
            public void run() { 
                handler.post(new Runnable() { 
                    @Override 
                    public void run() { 
                        synchronized (synObj) { 
                            if (toast != null) { 
                                toast.cancel(); 
                                toast.setText(msg); 
                                toast.setDuration(len); 
                            } else { 
                                toast = Toast.makeText(act, msg, len); 
                            } 
                            toast.show(); 
                        } 
                    } 
                }); 
            } 
        }).start(); 
    } 


代码的逻辑很简单。这里加了同步,这样做可以确保每一个toast的内容至少可以显示出来,而不是还没显示就取消掉了。这样做,是因为toast的内容不一定完全相同,如果没显示出来,也会有问题。

您可能感兴趣的文章:Android控件系列之Toast使用介绍android之自定义Toast使用方法Android开发技巧之永不关闭的Toast信息框(长时间显示而非系统关闭)Android 5.0以上Toast不显示的解决方法Android Toast的用法总结(五种用法)android 弹出提示框的使用(图文实例)Android仿QQ、微信聊天界面长按提示框效果Android编程之自定义AlertDialog(退出提示框)用法实例Android仿iOS自定义AlertDialog提示框Android使用Toast显示消息提示框


--结束END--

本文标题: Android中使用Toast.cancel()方法优化toast内容显示的解决方法

本文链接: https://www.lsjlt.com/news/27811.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作