美文网首页
ToastUtil工具类

ToastUtil工具类

作者: 追风z | 来源:发表于2020-09-24 17:00 被阅读0次

    一.使用ToastUtil

    封装的目的:不让业务直接操作具体的框架,而操作我们的API,这样方便后面重构。

    在Android开发中,有些时候,可能要求定制Toast,例如:前面显示一个图标,或者正确操作显示绿色,错误操作,显示红色;这时候可以自己定义,可以使用第三方框架。

    //toast工具类
    //https://github.com/GrenderG/Toasty
    implementation 'com.github.GrenderG:Toasty:1.4.2'
    

    项目的根目录build.gradle 文件

    buildscript {
        repositories {
            google()
            jcenter()
            maven { url "https://jitpack.io" }//github网站上说这里也要配置
        }
       ...
    }
    
    allprojects {
        repositories {
            google()
            jcenter()
            maven { url "https://jitpack.io" }
        }
    }
    

    使用如下:

    1.在应用上下文初始化

    /**
     * 全局Application
     */
    public class AppContext extends Application {
    
        /**
         * 创建了 (第一次创建应用或者杀掉应用后就会执行一次这个方法)
         */
        @Override
        public void onCreate() {
            super.onCreate();
            //初始化toast工具类
            Toasty.Config.getInstance().apply();
        }
    }
    

    2.定义工具类

    /**
     * Toast工具类
     */
    public class ToastUtil {
    
        /**
         * 上下文
         * 这里的话,是持有应用的引用,所以应该不会造成内存泄漏
         */
        @SuppressLint("StaticFieldLeak")//最好写上这句(教程没有的)
        private static Context context;
    
        /**
         * 初始化方法
         *
         * @param context Context
         */
        public static void init(Context context) {
            ToastUtil.context = context;
        }
    
        /**
         * 显示短时间错误toast
         * <p>
         * 校验参数
         *
         * @param id      @StringRe:必须是字符串的id
         */
    //    public static void errorShortToast(@NonNull Context context, @StringRes int id) {
        public static void errorShortToast(@StringRes int id) {
            //必须要调用show方法
            Toasty.error(context, id, Toasty.LENGTH_SHORT).show();
        }
    
        /**
         * 显示短时间错误toast 字符串的形式  目前requestErrorHandler方法使用到
         *
         * @param message Message
         */
        public static void errorShortToast(String message) {
            //必须要调用show方法
            Toasty.error(context, message, Toasty.LENGTH_SHORT).show();
        }
    
    
        /**
         * 显示长时间错误toast
         * @param id      字符串id
         */
    //    public static void errorLongToast(@NonNull Context context, @StringRes int id) {
        public static void errorLongToast(@StringRes int id) {
            Toasty.error(context, id, Toasty.LENGTH_LONG).show();
        }
    
        /**
         * 显示短时间正确toast
         *
         * @param id 通过id找字符串
         */
        //    public static void successShortToast(@NonNull Context context, @StringRes int id) {
        public static void successShortToast(@StringRes int id) {
            Toasty.success(context, id, Toasty.LENGTH_LONG).show();
        }
    
        /**
         * 显示短时间正确toast
         *
         * @param data 字符串传入
         */
        public static void successShortToast(String data) {
            Toasty.success(context, data, Toasty.LENGTH_SHORT).show();
        }
    
    }
    
    

    3.使用工具类

    ToastUtil.successShortToast(getMainActivity(), "登录成功");
    ToastUtil.errorShortToast(getMainActivity(), R.string.enter_username);
    

    二.重构ToastUtil

    可以看到现在,每次使用ToastUtil的时候,还要传递Context,这样写起来比较麻烦,所以可以省略掉。

    如何省略?
    就是在应用启动的时候,初始化,也就是包context保存到ToastUtil,这样在显示toast的时候,就不用传递了。

    
    1.把Context在应用启动的初始化,并购保存到ToastUtil工具类的static字段中
    /**
     * 全局Application
     */
    public class AppContext extends Application {
    
        /**
         * 创建了 (第一次创建应用或者杀掉应用后就会执行一次这个方法)
         */
        @Override
        public void onCreate() {
            super.onCreate();
            //初始化toast工具类
            Toasty.Config.getInstance().apply();
            //初始化Toast工具类
            ToastUtil.init(getApplicationContext());
        }
    }
    
    
    package com.ixuea.courses.mymusicold.util;
    
    import android.annotation.SuppressLint;
    import android.content.Context;
    
    import androidx.annotation.StringRes;
    import es.dmoral.toasty.Toasty;
    
    **重构后的工具类**
    
    /**
     * Toast工具类
     */
    public class ToastUtil {
    
        /**
         * 上下文
         * 这里的话,是持有应用的引用,所以应该不会造成内存泄漏
         */
        @SuppressLint("StaticFieldLeak")//最好写上这句(教程没有的)
        private static Context context;
    
        /**
         * 初始化方法
         *
         * @param context Context
         */
        public static void init(Context context) {
            ToastUtil.context = context;
        }
    
        /**
         * 显示短时间错误toast
         * <p>
         * 校验参数
         *
         * @param id      @StringRe:必须是字符串的id
         */
    //    public static void errorShortToast(@NonNull Context context, @StringRes int id) {
        public static void errorShortToast(@StringRes int id) {
            //必须要调用show方法
            Toasty.error(context, id, Toasty.LENGTH_SHORT).show();
        }
    
        /**
         * 显示长时间错误toast
         * @param id      字符串id
         */
    //    public static void errorLongToast(@NonNull Context context, @StringRes int id) {
        public static void errorLongToast(@StringRes int id) {
            Toasty.error(context, id, Toasty.LENGTH_SHORT).show();
        }
    
        //    public static void successLongToast(@NonNull Context context, @StringRes int id) {
        public static void successLongToast(@StringRes int id) {
            Toasty.success(context, id, Toasty.LENGTH_SHORT).show();
        }
    }
    
    

    相关文章

      网友评论

          本文标题:ToastUtil工具类

          本文链接:https://www.haomeiwen.com/subject/gqfgyktx.html