Toast 多次显示问题
2016-03-31 09:58
363 查看
关于Toast 感觉这里还是有点坑的。
比如普通使用的时候,你在按钮处设置点击toast一下。点击一次他就会显示一条。点击两次它又会show一下。那点击多次。就会导致显示的时间变得漫长。这不仅很影响用户的体验,就连自己看的都感觉很不爽。所以很多公司都是重写XxxToast来实现,这方式很好,但是有的时候,可能你需要单独的写一个方法来进行控制。然后自然而然的我们就得思考怎么解决此问题,所以想到了三种解决方案。
一。利用累加时间.主要实现原理就是设置两个时间,比如currentTime、showTime,利用这两个的时间差和toast需要显示的时间进行控制是否需要进行toast。
二。是利用handler发送消息进行处理。
//首先定义全局变量mToast已经显示和隐藏函数
private Toast mToast;
public void showToast(String text) {
if(mToast == null) {
mToast = Toast.makeText(m_App.getActivity(), text, Toast.LENGTH_SHORT);
} else {
mToast.setText(text);
mToast.setDuration(Toast.LENGTH_SHORT);
}
mToast.show();
}
public void cancelToast() {
if (mToast != null) {
mToast.cancel();
}
}
//然后调用显示函数并向handler发消息
showToast(“test toast”);
Message delayMsg = m_Handler.obtainMessage(AIRPLAY_MESSAGE_HIDE_TOAST);
m_Handler.sendMessageDelayed(delayMsg, AIRPLAY_TOAST_DISPLAY_TIME);
//最后在handler中处理消息
private Handler m_Handler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
switch(msg.what){
case 0:
break;
case AIRPLAY_MESSAGE_HIDE_TOAST :
cancelToast();
break;
}
}
}
三。也是个人认为比较好的方法,简单的说就是吧showText给抽取出来。然后在显示的时候打断显示,比较重要的地方在if-else里面。
private Toast toast = null;
function1(){
showText("text1");
}
function2(){
showText("text2");
}
function3(){
showText("text");
}
....
private void showText(String msg) {
if (toast == null) {
toast = Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT);
} else {
toast.setText(msg);
}
toast.show();
}
比如普通使用的时候,你在按钮处设置点击toast一下。点击一次他就会显示一条。点击两次它又会show一下。那点击多次。就会导致显示的时间变得漫长。这不仅很影响用户的体验,就连自己看的都感觉很不爽。所以很多公司都是重写XxxToast来实现,这方式很好,但是有的时候,可能你需要单独的写一个方法来进行控制。然后自然而然的我们就得思考怎么解决此问题,所以想到了三种解决方案。
一。利用累加时间.主要实现原理就是设置两个时间,比如currentTime、showTime,利用这两个的时间差和toast需要显示的时间进行控制是否需要进行toast。
二。是利用handler发送消息进行处理。
//首先定义全局变量mToast已经显示和隐藏函数
private Toast mToast;
public void showToast(String text) {
if(mToast == null) {
mToast = Toast.makeText(m_App.getActivity(), text, Toast.LENGTH_SHORT);
} else {
mToast.setText(text);
mToast.setDuration(Toast.LENGTH_SHORT);
}
mToast.show();
}
public void cancelToast() {
if (mToast != null) {
mToast.cancel();
}
}
//然后调用显示函数并向handler发消息
showToast(“test toast”);
Message delayMsg = m_Handler.obtainMessage(AIRPLAY_MESSAGE_HIDE_TOAST);
m_Handler.sendMessageDelayed(delayMsg, AIRPLAY_TOAST_DISPLAY_TIME);
//最后在handler中处理消息
private Handler m_Handler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
switch(msg.what){
case 0:
break;
case AIRPLAY_MESSAGE_HIDE_TOAST :
cancelToast();
break;
}
}
}
三。也是个人认为比较好的方法,简单的说就是吧showText给抽取出来。然后在显示的时候打断显示,比较重要的地方在if-else里面。
private Toast toast = null;
function1(){
showText("text1");
}
function2(){
showText("text2");
}
function3(){
showText("text");
}
....
private void showText(String msg) {
if (toast == null) {
toast = Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT);
} else {
toast.setText(msg);
}
toast.show();
}
相关文章推荐
- 在一台服务器上搭建多个项目的SVN
- linux的权限和用户管理
- linenoise 源码分析(一)
- HadoopJob监控
- iphone
- Android网络通信框架LiteHttp2.0 开篇简介和大纲目录
- 回车换行0x0D和0x0A 小谈
- 父div随着子div的高度改变而改变
- 关于sizeof(struct student)的问题
- 基于JQuery打造无缝滚动新闻步骤详解
- 代码编译过程
- leetcode之reverse Linked List
- Oracle redo log
- Linux下安装Tomcat
- hadoop-1.2.1伪分布式安装
- 一张图看懂JavaScript中数组的迭代方法:forEach、map、filter、reduce、every、some
- 在Linux中使用线程
- MATLAB颜色的使用(转)
- performance.timing检测页面加载速度
- iOS UIWebView 通过 cookie 完成自动登录验证