Android 避免多次显示同一个 toast

直接上干货,这是一个全局的 Toast 工具类使用起来简单方便,还能满足一次只显示一条 toast 的要求:

import android.widget.Toast;

/**
 * Created by toby on 18-1-9.
 */
class GlobalToast {

    private static Toast toast = null;

    @SuppressLint("ShowToast")
    public static void show(CharSequence text, int toastDuration){
        try{
            toast.getView().isShown();
            toast.setText(text);
        } catch (Exception e) {
            toast = Toast.makeText(MyApplication.globalContext(), text, toastDuration);
        }
        toast.show();
    }

    public static void show(CharSequence text) {
        show(text, Toast.LENGTH_SHORT);
    }
}

其中 MyApplication.globalContext() 可以参考我的这篇文章 Android 获取全局 Context 对象

使用实例:

    @Override
    protected void onResume() {
        super.onResume();
        GlobalToast.show("进入加速监测...", Toast.LENGTH_SHORT);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (null != sensorManager) {
            sensorManager.unregisterListener(sensorEventListener);
        }

        GlobalToast.show("退出加速监测...", Toast.LENGTH_SHORT);
    }

    private SensorEventListener sensorEventListener = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent sensorEvent) {
            float x_value = Math.abs(sensorEvent.values[0]);
            float y_value = Math.abs(sensorEvent.values[1]);
            float z_value = Math.abs(sensorEvent.values[2]);

            if (x_value > THRESHOLD_VALUE || y_value > THRESHOLD_VALUE
                    || z_value > THRESHOLD_VALUE) {
                GlobalToast.show("设备正在晃动...", Toast.LENGTH_SHORT);
            }
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int i) {
        }
    };

本文参考链接:How to avoid a Toast if there's one Toast already being shown

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容