Android不同版本上Toast连续显示的问题
来源:互联网 发布:学java和php 编辑:程序博客网 时间:2024/06/06 04:03
Toast可以用来显示提示信息,如果用户连续做某个动作,持续不断的弹出Toast,默认情况下会都显示出来,由于是toast是排队显示的,这样就会持续很长时间。
通过查看API可知,可以执行show显示之前,先调用cancel取消之前的显示,这样就不会出现连续显示的问题,只显示最后一次的提示。
但是,不是所有的版本上都可以这样使用的。通过查看Toast类的cancel函数可知,cancel函数在不同版本上有变化。如果是在2.3,4.0版本上,执行cancel后接着调用show函数就会抛出异常,log提示toast的view没有设置。如下所示:
01-01 09:07:45.490 D/AndroidRuntime( 2147): Shutting down VM
01-01 09:07:45.490 W/dalvikvm( 2147): threadid=1: thread exiting with uncaught exception (group=0x4001d878)
01-01 09:07:45.490 E/AndroidRuntime( 2147): FATAL EXCEPTION: main
01-01 09:07:45.490 E/AndroidRuntime( 2147): java.lang.RuntimeException: setView must have been called
01-01 09:07:45.490 E/AndroidRuntime( 2147): at android.widget.Toast.show(Toast.java:98)”异常处理
原因是因为Toast的cancel函数,把Toast的mNextView成员变量置为null了,所以会提示没有设置view。
那么,我们在显示之前先设置一下Toast的setView函数,可以把第一次创建的Toast对象,通过getView方法取得view,待以后通过setView来设置要显示的view。
这样虽然不会出现以上异常,但是toast还是显示不出来。原因需要进一步调查Toast的cancel,show等方法来查证。
目前,有另外一个方法可以解决toast连续显示的问题,那就是不用cancel方法。而是在第二次及以后显示toast时,使用setView,setText,setDuration方法来重新设置view,text,duration;这样再执行show时,就会按照最后一次的设置来显示,显示时间就是setDuration设置的时间,显示时间可以设置为Toast.LENGTH_SHORT和Toast.LENGTH_LONG。
需要设置setView是因为在toast显示完后,再次设置setText时,因为mNextView为null抛出以下toast没有创建的错误。
This Toast was not created with Toast.makeText()
所以setView也是必需的。
通过以上方法就可以避免使用cancel抛出异常的问题,又能解决toast多次持续显示的问题。
其实在4.0中不设置iew和duraion,只设置text也是可以的,在toast显示时会实时更新text显示,并重新计时,不会出现toast延迟显示的问题。
在不同版本上Toast类的处理机制变化较大,需要好好研究才能正确使用,对不同版本上的代码移植带来了麻烦。
参考:
Android4.0 Toast显示问题分析
转载来自:http://blog.csdn.net/ameyume/article/details/7714491
- Android不同版本上Toast连续显示的问题
- Android不同版本上Toast连续显示的问题
- Toast连续弹出的问题
- Android解决重复连续显示Toast
- Android Toast 显示时间问题的探讨
- Android Toast显示叠加的问题
- Android中的Toast重复显示的问题
- Android中的Toast重复显示的问题
- Android Toast 显示时间问题的探讨
- Android 解决Toast的延时显示问题
- Android中的Toast重复显示的问题
- Android Toast显示异常的问题
- Android 中toast显示在不同位置
- 防止Toast连续显示
- Toast 解决连续显示
- Android实现多条Toast快速显示(强制中止上一条Toast的显示)
- Android Menu的overflow在不同版本上的控制显示
- Android Toast 重复显示问题
- 点击弹出层外区域关闭弹出层jquery特效代码
- Android应用的自动升级、更新模块的实现
- hdu 4071 Game
- dos 部分网络命令
- java,Exception,String
- Android不同版本上Toast连续显示的问题
- jQuery、js全页面刷新方法
- moravec角点检测算法
- Dynamics CRM 2013 初体验(3):新增加的功能
- Dynamics CRM 2013 初体验(4):不再被支持的功能
- 将dom对象转成jquery对象 和不能编辑日期控件的文本框
- Dynamics CRM 2013 初体验(5):Business Rule
- 创建表空间及添加数据文件
- 流失客户表