服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Android中使用Toast.cancel()方法优化toast内容显示的解决方法

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

2021-01-15 15:05Android开发网 Android

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

产品在测试过程中发现一个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; 

 

复制代码 代码如下:

/**   
 * Toast util class.   
 *    
 * @author <A href="http://jb51.net">http://jb51.net</A>   
 * @version 2011/11/30   
 *    
 */  
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(); 
                        } 
                    } 
                }); 
            } 
        }).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的内容不一定完全相同,如果没显示出来,也会有问题。

延伸 · 阅读

精彩推荐
  • AndroidAndroid CardView+ViewPager实现ViewPager翻页动画的方法

    Android CardView+ViewPager实现ViewPager翻页动画的方法

    本篇文章主要介绍了Android CardView+ViewPager实现ViewPager翻页动画的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Abby代黎明9592022-03-02
  • AndroidAndroid实现固定屏幕显示的方法

    Android实现固定屏幕显示的方法

    这篇文章主要介绍了Android实现固定屏幕显示的方法,实例分析了Android屏幕固定显示所涉及的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    鉴客6182021-03-27
  • AndroidAndroid程序设计之AIDL实例详解

    Android程序设计之AIDL实例详解

    这篇文章主要介绍了Android程序设计的AIDL,以一个完整实例的形式较为详细的讲述了AIDL的原理及实现方法,需要的朋友可以参考下...

    Android开发网4622021-03-09
  • AndroidAndroid编程解析XML方法详解(SAX,DOM与PULL)

    Android编程解析XML方法详解(SAX,DOM与PULL)

    这篇文章主要介绍了Android编程解析XML方法,结合实例形式详细分析了Android解析XML文件的常用方法与相关实现技巧,需要的朋友可以参考下...

    liuhe68810042021-05-03
  • AndroidAndroid界面效果UI开发资料汇总(附资料包)

    Android界面效果UI开发资料汇总(附资料包)

    android ui界面设计,友好的界面会提高用户体验度;同时也增强了android ui界面设计的难度,本文提供了一些常用开发资料(有下载哦)感兴趣的朋友可以了解下...

    Android开发网4652021-01-03
  • Android汇总Android视频录制中常见问题

    汇总Android视频录制中常见问题

    这篇文章主要汇总了Android视频录制中常见问题,帮助大家更好地解决Android视频录制中常见的问题,需要的朋友可以参考下...

    yh_thu5192021-04-28
  • AndroidAndroid实现Service获取当前位置(GPS+基站)的方法

    Android实现Service获取当前位置(GPS+基站)的方法

    这篇文章主要介绍了Android实现Service获取当前位置(GPS+基站)的方法,较为详细的分析了Service基于GPS位置的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    Ruthless8332021-03-31
  • AndroidAndroid中AsyncTask详细介绍

    Android中AsyncTask详细介绍

    这篇文章主要介绍了Android中AsyncTask详细介绍,AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合,需要的朋友可以参考下...

    Android开发网7432021-03-11