在我的應用中切換片段之前,我通過Toast提供用戶反饋。一旦吐司出現,它永遠不會清除。退出活動或殺死整個事情是清除吐司的唯一方法。當我交換片段時Toasts永遠不會清除
我試圖在提交FragmentTransaction之後保留對Toast的引用並調用cancel(),但是當我這樣做時,Toast永遠不會出現。
我已經添加了日誌記錄,並確定Toast只顯示一次,而不是循環或重複。該應用程序仍然是響應,否則,而不是掛起。當我退出應用程序時,Toast清除了onStop()中的cancel()。
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;
}
}
}
}
我認爲這是可取的綁定到應用程序上下文?由於活動可能會在提交敬酒後退出。 'this'不是Activity,因爲這個Toast顯示在ResultReceiver類中。我試圖將ResultReciever內容移到另一個可以訪問'this'的方法,但結果是一樣的。吐司出現並永不消失。 –
我看到Toast在你的內部類MyServiceReceiver下,你不需要移動你的代碼來使用它,可以使用Toast.makeText(MyActivity.this,「my error message」,Toast.LENGTH_SHORT).show() 。更重要的是確保你的麪包不被多次調用。請讓我知道這對你有沒有用。 – Ethan
謝謝,我仍然有一兩件事來了解Java。使用Activity上下文仍然沒有解決問題。 ResultReceiver是從一個IntentService中調用的,所以在非UI線程中,[我現在看到Toasts必須從UI線程創建](http://stackoverflow.com/questions/12407910/android-toast-從-intentservice-仍然-屏幕換過?LQ = 1)。 –