我希望吐司可以在片段完成后立即消失

时间:2015-08-07 05:57:55

标签: android toast

我希望吐司在片段完成后立即消失。

有一个ToastUtils类。

import android.content.Context;
import android.widget.Toast;

public class ToastUtils{
    private static Toast mToast;
    public static void showToast(Context context, int msg, int duration) {
        if (mToast == null) {
            mToast = Toast.makeText(context, msg, duration);
        } else {
            mToast.setText(msg);
        }
        mToast.show();
    }
    public static void showToast(Context context, String msg, int duration) {
        if (mToast == null) {
            mToast = Toast.makeText(context, msg, duration);
        } else {
            mToast.setText(msg);
        }
        mToast.show();
    }
    public static void clearToast(){
        mToast.cancel();
    }
}

许多人说压倒 onStop 可以解决这个问题。

所以我覆盖片段

中的函数 onStop
@Override
    public void onStop(){
        super.onStop();
        ToastUtils.clearToast();
    }

但它给出了例外

08-07 14:48:50.070  11178-11178/? W/System.err﹕ java.lang.NullPointerException
08-07 14:48:50.075  11178-11178/? W/System.err﹕ at com.shijiebang.offlinemap.utils.ToastUtils.clearToast(ToastUtils.java:30)
08-07 14:48:50.075  11178-11178/? W/System.err﹕ at com.shijiebang.offlinemap.ui.Fragment.LoginFragment.onStop(LoginFragment.java:173)
08-07 14:48:50.075  11178-11178/? W/System.err﹕ at android.app.Fragment.performStop(Fragment.java:1888)
08-07 14:48:50.075  11178-11178/? W/System.err﹕ at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:948)
08-07 14:48:50.075  11178-11178/? W/System.err﹕ at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1071)
08-07 14:48:50.075  11178-11178/? W/System.err﹕ at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1053)
08-07 14:48:50.075  11178-11178/? W/System.err﹕ at android.app.FragmentManagerImpl.dispatchStop(FragmentManager.java:1880)
08-07 14:48:50.075  11178-11178/? W/System.err﹕ at android.app.Activity.performStop(Activity.java:5471)
08-07 14:48:50.075  11178-11178/? W/System.err﹕ at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3713)
08-07 14:48:50.075  11178-11178/? W/System.err﹕ at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3772)
08-07 14:48:50.075  11178-11178/? W/System.err﹕ at android.app.ActivityThread.access$1700(ActivityThread.java:139)
08-07 14:48:50.075  11178-11178/? W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)
08-07 14:48:50.075  11178-11178/? W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
08-07 14:48:50.075  11178-11178/? W/System.err﹕ at android.os.Looper.loop(Looper.java:136)
08-07 14:48:50.075  11178-11178/? W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5314)
08-07 14:48:50.075  11178-11178/? W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
08-07 14:48:50.075  11178-11178/? W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
08-07 14:48:50.075  11178-11178/? W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
08-07 14:48:50.075  11178-11178/? W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:680)
08-07 14:48:50.075  11178-11178/? W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)

我不知道原因。请帮忙!

2 个答案:

答案 0 :(得分:0)

我认为它应该没有错误

public static void clearToast(MyActivity activity){
  activity.runOnUiThread(new Runnable() {  
   if(mToast != null){
    if (mToast.getView().isShown())
    {
       mToast.cancel();
    }
   }
  }
}

像这样调用这个函数。将MyActivity名称更改为您的活动。

clearToast(this);

答案 1 :(得分:0)

尝试使用hide()方法代替cancel()