我希望吐司在片段完成后立即消失。
有一个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)
我不知道原因。请帮忙!
答案 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()