Android Toast多次弹出问题

思路:
把要弹出的消息存到列表中一个一个显示,添加消息时如果消息列表已经有了消息则不添加到列表中;显示完的消息从列表中移除。
具体实现:

package com.david.mytest.utils;

import android.view.View;
import android.widget.Toast;

import com.david.mytest.application.BaseApplication;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by cuiweixing on 2018/7/25.
 *
 * when the message is already in list, then it will just toast one
 */

public class ToastUtils implements View.OnAttachStateChangeListener {
    private static ToastUtils toastUtils;
    private Toast toast;
    private final List<String> messages;
    private ToastUtils(){
        toast = Toast.makeText(BaseApplication.mApplication, "", Toast.LENGTH_LONG);
        toast.getView().addOnAttachStateChangeListener(this);
        messages = new ArrayList<>();
    }
    public static ToastUtils getInstance(){
        if (toastUtils == null) {
            synchronized (ToastUtils.class) {
                if (toastUtils == null) {
                    toastUtils = new ToastUtils();
                }
            }
        }
        return toastUtils;
    }

    public synchronized void showToast(String message){
        synchronized (messages) {
            boolean showToast = false;
            if (messages.size() == 0)
                showToast = true;
            if (!messages.contains(message)) {
                messages.add(0, message);
            }
            if (showToast) {
                toast.setText(messages.get(messages.size() - 1));
                toast.show();
                toast.show();
            }
        }
    }

    private synchronized void removeMessage(){
        synchronized (messages){
            if (messages.size() > 0) {
                messages.remove(messages.size() - 1);
            }
        }
    }

    @Override
    public void onViewAttachedToWindow(View v) {

    }

    @Override
    public void onViewDetachedFromWindow(View v) {
        removeMessage();
        if (messages.size() > 0){
            toast.setText(messages.get(messages.size() - 1));
            toast.show();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值