Android不同版本上Toast连续显示的问题
2013-08-26 14:32
344 查看
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显示问题分析
转载来自:/article/1426091.html
通过查看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显示问题分析
转载来自:/article/1426091.html
相关文章推荐
- Android不同版本上Toast连续显示的问题
- 解决不同版本的eclipse或sdk所导致的android layout xml无法显示的问题
- Android 中toast显示在不同位置
- Android Toast显示异常的问题
- Android Menu的overflow在不同版本上的控制显示
- Android在thread中Toast不能显示有关问题解决
- android N版本 SystemUI显示问题。
- 连续二次按返回退出应用程序(多次按Toast一直长时间显示问题处理)
- android中Toast重复显示问题解决
- 解决Android Toast重复显示等待时间过长的问题
- HttpURLConnection 因Android版本不同而导致的Bad Request问题,在2.0+不行,4.0+可以
- Android不同系统版本的悬浮窗权限问题
- Android Toast显示叠加的问题
- Android中Toast重复显示问题解决
- Android中防止Toast重复显示的问题
- Android中toast重复显示时间过长问题解决
- 发布版本的android应用,百度地图不显示问题
- Android中的Toast重复显示的问题
- 解决Android 4.0以上版本中OptionsMenu菜单不显示ICON图标的问题