[Android] 多次按钮点击Toast重复显示解决方案

【背景介绍】

  最近遇到这样一个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多次重复展示
  

【个人总结】

  1. 消除多次点击按钮Toast重复显示:两条内容相同的Toast展示时间差值需要大于一个固定值

【原创声明】

  转载请注明出处,个人Blog主页:个人博客地址
  Blog地址:http://blog.csdn.net/csdn_lexli/article

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值