Android不同版本上Toast连续显示的问题
2012-07-04 11:39
239 查看
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中不设置view和duraion,只设置text也是可以的,在toast显示时会实时更新text显示,并重新计时,不会出现toast延迟显示的问题。
在不同版本上Toast类的处理机制变化较大,需要好好研究才能正确使用,对不同版本上的代码移植带来了麻烦。
参考:
Android4.0 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中不设置view和duraion,只设置text也是可以的,在toast显示时会实时更新text显示,并重新计时,不会出现toast延迟显示的问题。
在不同版本上Toast类的处理机制变化较大,需要好好研究才能正确使用,对不同版本上的代码移植带来了麻烦。
参考:
Android4.0 Toast显示问题分析
相关文章推荐
- Android不同版本上Toast连续显示的问题
- 解决不同版本的eclipse或sdk所导致的android layout xml无法显示的问题
- android 个别机型Toast(显示不出来)问题
- Android中的Toast重复显示的问题
- Android之屏幕方向|显示方式|Activity重建问题|横竖屏切换不同的布局
- android中Toast显示时间累加问题的解决
- android 使用Dialog实现Toast效果,解决有的机型不显示Toast的问题(保证能用)
- 【Android】(已更新解决方案)更新SDK版本(25)后,自定义FloatingActionButton的Behavior(跟随列表滑动显示隐藏)只隐藏不出现的问题
- Android开发中解决Toast长时间显示问题
- Android把相同图片放到不同的文件夹显示不同的问题
- Android解决重复连续显示Toast
- Android-优化不同版本系统WebView版本兼容性问题
- Android Service中使用Toast无法正常显示问题的解决方法
- Android Toast 显示时间问题的探讨
- 笔记:Android判断版本并根据版本使用不同的代码以及旧版本XML问题
- Android应用程序当中GridView显示不同大小图片时Item挤出问题解决办法
- Android Toast 显示时间问题的探讨
- Android中的Toast重复显示的问题
- Android在thread中Toast不能显示问题解决
- ubuntu 编译android时,java和javac版本不同引起的问题。