Я предоставляю отзывы пользователей с помощью Toast перед переключением фрагментов в своем приложении. Как только Toast появляется, он никогда не очищается. Выход из действия или уничтожение всего этого — единственный способ очистить тост.
Я попытался сохранить ссылку на Toast и вызвать cancel() после фиксации FragmentTransaction, но когда я это делаю, Toast вообще никогда не появляется.
Я добавил ведение журнала и уверен, что Toast отображается только один раз, а не в цикле или повторно. В противном случае приложение по-прежнему реагирует и не зависает. Когда я выхожу из приложения, Toast очищается благодаря функции cancel() в onStop().
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;
}
}
}
}