2017-09-20 39 views
0

我使用下面的代碼來顯示比平常更長的烤麪包,並且它在長時間顯示想要的文本方面工作良好,在用戶感知方面沒有差別通常敬酒,除了時間。取消定製的,比平時更長的烤麪包

Toast toast; 
CountDownTimer mcd; 

[...] 

toast=Toast.makeText(getApplicationContext(), 
StaticMethods.giveStringAccordingtoLanguage(action,language), 
Toast.LENGTH_LONG); 
mcd=new CountDownTimer(6000, 50) 
{ 

    public void onTick(long millisUntilFinished) {toast.show();} 
    public void onFinish() {toast.show();} 

}.start(); 

但是,當用戶退出如果定製吐司顯示應用它不斷顯示,直到其時間完成。

我試着像這樣的代碼來解決它,當應用程序正在退出:

try 
    { 
     toast.cancel(); 
    } 
    catch (Exception e) 
    { 
    } 
    try 
    {   
     mcd.cancel(); 
    } 
    catch (Exception e) 
    { 
    } 

反正它不會在所有的工作。

我還試圖重新定義刻度線的行爲有這樣的代碼:

mcd.onTick(long millisUntilFinished) {toast.cancel();} 

mcd.onFinish() {toast.cancel();} 

但是,代碼是不正確的,甚至,它看起來如果在創作完成,這不僅是正確的通過新的一個新的CountDownTimer對象。

關於如何解決這個問題的任何想法?在最壞的情況下,我可以彈出一個對話框,在退出應用程序後不會繼續顯示,但我更喜歡這樣做,因爲我認爲這對用戶會更好。

+0

你有沒有試過把'mcd.cancel()'放在'toast.cancel()'之前,而不是之後? – SoroushA

+0

@SoroushA,感謝您的提示,我沒有反正我現在測試它,並沒有幫助。 –

回答

0

如果cancel()和hide()不起作用,您應該嘗試使用看起來像該活動/片段的祝酒的動畫來實現自定義視圖。這種方式視圖可以隨時關閉,它只附加到該活動/片段。

請參見下面的計算器answer

我希望這有助於!

0

你說「一直顯示,直到它的時間完成」 - 這次是正常的LENGTH_LONG時間還是你的6000毫秒時間?如果是LENGTH_LONG我不會打擾,因爲這是烤麪包的正常行爲。 儘管您可以通過使用LENGTH_SHORT來縮短時間。

如果是6000ms,取消CountdownTimer會出現問題。你在你的代碼中調用mcd.cancel()在哪裏?在Activity#onDestroy()?確保(通過調試)mcd.cancel()被調用。

編輯:吐司累積

我想,這可能是一些被稱爲麪包累積。敬酒不是屬於你的應用程序的普通視圖,而是作爲遠程視圖創建的。所以我想,如果你調用toast.show(),它會告訴系統顯示那個視圖,它會創建一些副本並顯示它。一次又一次調用show()將這些顯示請求排入隊列,而cancel()僅消除最後一次請求的消耗。長話短說:在CountDownTimer的onTick()和onFinish()方法中,嘗試在調用toast.show()之前直接調用toast.cancel()。這應該避免敬酒的堆積(排隊) - 我希望它不閃爍,但我懷疑它,由於淡出動畫吐司使用。

+0

這是6000毫秒。是的,它在#onDestroy中執行,我調試了代碼和cmd.cancel();被執行,但它似乎沒有做任何事情。 –

+0

看到我編輯的答案 - 它可能工作 – Ridcully