【背景介绍】
最近遇到这样一个BUG,页面中有个按钮,点击按钮后弹出toast提示。但是多次点击此按键时,Toast会一直显示,点击的次数越多,显示的时间越长(其实就是多次点击按键时,Toast顺序响应,使得总的展示时间变长,给用户不友好的展示)。
多次点击后Toast一直显示的效果:
【解决方案】
public class MainActivity extends AppCompatActivity {
private long lastShowTime = 0l;
private String lastShowMsg = null;
private String curShowMsg = null;
private final int TOAST_DURATION = 2000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.test_btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(MainActivity.this, "用户点击了按键!", Toast.LENGTH_SHORT).show();
customShowToast(MainActivity.this, "用户点击了按键!");
}
});
}
private void customShowToast(Context context, CharSequence s) {
curShowMsg = s.toString();
long curShowTime = System.currentTimeMillis();
if (curShowMsg.equals(lastShowMsg)) {
if (curShowTime - lastShowTime > TOAST_DURATION) {
Toast.makeText(context, s, Toast.LENGTH_SHORT).show();
lastShowTime = curShowTime;
lastShowMsg = curShowMsg;
}
} else {
Toast.makeText(context, s, Toast.LENGTH_SHORT).show();
lastShowTime = curShowTime;
lastShowMsg = curShowMsg;
}
}
}
类似于两次点击后退键退出应用程序一样:两次Back键点击退出应用程序 通过添加标志位表示上一次动作的时间,以及上一次展示的Toast内容。如果Toast内容一致,且Toast上次显示的时间距离本地显示的时间在一个合理的跨度时间内,可以忽略本次Toast的展示。采用这种方式管理Toast的展示后,得到的效果:
【个人总结】
- 消除多次点击按钮Toast重复显示:两条内容相同的Toast展示时间差值需要大于一个固定值
【原创声明】
转载请注明出处,个人Blog主页:个人博客地址
Blog地址:http://blog.csdn.net/csdn_lexli/article