在我的应用程序中切换片段之前,我通过 Toast 提供用户反馈。一旦 Toast 出现,它就永远不会清除。退出 Activity 或杀死整个事物是清除 Toast 的唯一方法。
我试图在提交 FragmentTransaction 后保留对 Toast 的引用并调用 cancel(),但是当我这样做时,Toast 根本不会出现。
我添加了日志记录,并确定 Toast 只显示一次,而不是循环或重复显示。否则,该应用程序仍然可以响应,并且不会挂起。当我退出应用程序时,由于 onStop() 中的 cancel(),Toast 会被清除。
public final class MyActivity extends SherlockFragmentActivity {
Toast toast = null;
//...
@Override
protected void onStop () {
if (toast != null) toast.cancel();
toast = null;
super.onStop();
}
//...
private final class MyServiceReceiver extends ResultReceiver {
public MyServiceReceiver(Handler handler) {
super(handler);
}
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
if (resultCode == MY_ERROR_CODE) {
toast = Toast.makeText(getApplicationContext(), "my error message", Toast.LENGTH_SHORT);
toast.show();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out,
android.R.anim.fade_in, android.R.anim.fade_out);
ft.replace(R.id.main_layout, new MyFragment());
ft.commit();
//if (toast != null) toast.cancel();
//toast = null;
}
}
}
}