MyToast不延时的方法

很简单,自己写个类。类里面只用一个toast对象去show。show之前用一个简单的if语句去判断当前toast对象是否还在,若在则将其释放掉在运行新的toast对象。 这样每次调用这个方法,不管上一个toast有没有执行完,都会将其cancle掉,运行当下。

话不多说,上式例:

写好封装类以供调用:

public class MyToast extends Application {
   static Toast toast;


    public  static void show(Context context,String text,int time){

        if(toast!=null){
        
            toast.cancel();

        }
        
        toast= toast.makeText(context, text, time);
        toast.show();

    }

}

在活动中调用工具类:

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.text1)
    TextView text1;
    @BindView(R.id.bun1)
    Button bun1;
    @BindView(R.id.bun2)
    Button bun2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
    }

    @OnClick({R.id.bun1, R.id.bun2})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.bun1:
              // 1,最初始: Toast.makeText(this, "1111", Toast.LENGTH_SHORT).show();
              
                MyToast.show(getApplicationContext(),"111",Toast.LENGTH_LONG);//类名+方法名
                
                break;
            case R.id.bun2:
               // 1,最初始:Toast.makeText(this, "2222", Toast.LENGTH_SHORT).show();
               
               MyToast.show(getApplicationContext(),"222",Toast.LENGTH_LONG);//类名+方法名
               
                break;
        }
    }
}

MyToast不延时的方法_第1张图片MyToast不延时的方法_第2张图片


嫌传参麻烦的话,还有一个更简单的方法:

在写一个工具类MyApplication与清单文件结合起来,供MyToast类使用(当做它的第一个参数----获取当前活动)。第三个参数也给它写死,只留第二个参数供使用者填写要提示的内容。

新建工具类MyApplication:

package com.example.toast.utils;

import android.app.Application;

/**
 * Created by Acer on 2019/9/4.
 */

public class MyApplication extends Application {

   static MyApplication application;

    @Override
    public void onCreate() {
        super.onCreate();
        application=this;

    }


    public static MyApplication getApplication() {
        return application;
    }
}

在manifest.xml文件中添加一条属性 android:name=".utils.MyApplication" ——也就是你工具类MyApplication建立的地址

MyToast不延时的方法_第3张图片

随后在MyToast类中重载show的方法,补全另外两个参数方便使用:

public class MyToast extends Application {
   static Toast toast;


    public  static void show(Context context,String text,int time){

        if(toast!=null){
            toast.cancel();

        }


        toast= toast.makeText(context, text, time);
        toast.show();

    }

    //重载方法2
    public  static void show(String text){

        if(toast!=null){
            toast.cancel();

        }

        Context context=MyApplication.getApplication();
        int time=Toast.LENGTH_LONG;

        toast= toast.makeText(context, text, time);
        toast.show();

    }

}

主活动使用:

public class MainActivity extends AppCompatActivity {

.................

 @OnClick({R.id.bun1, R.id.bun2})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.bun1:
              // 1,最初始: Toast.makeText(this, "1111", Toast.LENGTH_SHORT).show();
              //2,Toast工具类:  MyToast.show(getApplicationContext(),"111",Toast.LENGTH_LONG);

             MyToast.show("111");//重载方法,传一参
             
                break;
            case R.id.bun2:
               // 1,最初始:Toast.makeText(this, "2222", Toast.LENGTH_SHORT).show();
               //2,Toast工具类:  MyToast.show(getApplicationContext(),"222",Toast.LENGTH_LONG);

               MyToast.show("222");

                break;
        }
    }
}

你可能感兴趣的:(Android)