LemonBubble,是一个很方便的提示框组件。一般用它来构建一些简单的自动添加蒙板的反馈,例如“数据加载中”,“数据加载成功”,“数据加载失败”等等。这些在其官网上也有介绍https://github.com/LemonITCN/LemonBubble。用起来十分方便。

其中

          showRight(Context context,String title, int autoCloseTime);

          showRoundProgress(Context context,String title);

          showError(Context context,String title, int autoCloseTime);

这三个最常用,至于参数的意思顾名思义不再赘述。本文主要要说下使用时要注意的地方。不注意还真就用不了这个简单的UI组件

 

一、showRoundProgress没有自动关闭重载方法怎么办?

   没有是当然的,显示“数据加载中”根本无法预期固定时间,按一般的业务逻辑,应该是什么时候加载完毕,什么时候让这个提示图标消失。所以需要它消失时,要么LemmonBubble.hide()或forceHide()。要么直接show一个新的提示框,这个也会自动消失。

 

二、窗口溢出泄露怎么办

   主要原因是,这个LemmonBubble的提示框还在show的时候,你切换了Activity改变了当前的Context。解决方法就是,在提示框消失后再跳转页面,比如利用Handler.sendEmptyMessageDelayed来延迟当前的窗口切换。

 

三、无法在异步耗时操作中使用提示框

   如果你有这种打算
       

LemonBubble.showRoundProgress(Activity.this,"数据加载中");

         asynchronousOperatin();//一个获取数据的异步耗时操作

         LemonBubble.showRight(Activity.this,"数据加载成功",1500);

你会发现无论如何第一个提示框都不会出现,而是再等待了2秒后直接出现了“数据加载成功”。原因暂时不是很清楚,估计可能是当前的消息队列不运行到最后一行是不会开始进行loop的缘故。总之,解决方法就是利用Handler的消息处理机制

将代码第三句写在异步操作里并包裹在new Handler重写的handleMessage(Message msg)中。这里还要不能直接通过子线程的handler来更新UI,handler是用来在子线程向主线程传递消息用的,最终消息要到主线程的消息队列中,所以不能直接new Handler()而要用其一个带参构造方法,在子线程中new Handler(getMainLooper())才行。