Android-同一Context中多次弹出气泡消息注意事项
?
”下面是2.2和4.0中Toast源码的链接:
http://www.oschina.net/code/explore/android-2.2-froyo/android/widget/Toast.java
http://www.oschina.net/code/explore/android-4.0.1/core/java/android/widget/Toast.java
比较两者关于cancel()处理的差异发现了如下差异:
在4.0中如下:
final Runnable mHide = new Runnable() {
???????????public void run() {
??????????????? handleHide();
??????????????? // Don't do this in handleHide()because it is also invoked by handleShow()
??????????????? mNextView = null;
???????????}
???????};
而2.2中没有mNextView = null;这一行代码。
再查看show()中有如下源码:
if (mNextView == null) {
???????????throw new RuntimeException("setView must have been called");
???????}
所以判断产生的Bug的原因是2.2系统和4.0系统对cancel的处理的差异造成的,将cancel注释就可以正常显示了。“
?
但是4.0以下系统需要用到cancel()怎么办?下面是另一篇文章?http://blog.csdn.net/gouguofei/article/details/7814195?给出的一个解决办法,贴出片段:
?“但是注释掉以后对4.0以下的系统需要cancel()怎么办呢,这里我的解决办法是在程序里获取系统版本,如果是4.0及以上就不执行cancel(),否则执行cancel()。?”
?
获取系统版本比较简单:int version = Integer.valueOf(android.os.Build.VERSION.SDK) 即可获得
?
?
?
?