2014-11-20 6 views
8

Quando provo a fare un WindowManager.removeView(),C'è un modo per verificare se Android WindowManager contiene già una vista?

E/AndroidRuntime(2445): java.lang.IllegalArgumentException: View=android.widget.LinearLayout{41a03700 V.E..... ......I. 0,0-0,0} not attached to window manager 

E/AndroidRuntime(2445):    at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:370) 

E/AndroidRuntime(2445):    at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:299) 

E/AndroidRuntime(2445):    at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:79) 

ottengo questo errore fatale perché la vista non era nel window manager. Non c'è modo di verificare se windowmanager abbia già aggiunto la vista in precedenza? Non vedo tale metodo nella source

risposta

23

È possibile controllare per vedere se Token finestra della vista è nullo:

if(view.getWindowToken() != null){ 
    WindowManager.removeView(view); 
} 

Si potrebbe anche solo intercettare l'eccezione:

try{ 
    WindowManager.removeView(view); 
}catch(IllegalArgumentException e){ 
    Log.e(debug_tag, "view not found"); 
} 
+0

Posso provare il tuo suggerimento, ma non sembra "giusto". Un'eccezione IMHO non dovrebbe essere ignorata - quando c'è un bug nel mio programma, ignorare l'eccezione sarà brutto. – likejiujitsu

+0

Sono d'accordo, non dovresti ignorarlo, ma è una potenziale soluzione. Ho aggiunto un'altra idea. –

+0

facendo il try-catch e ignorandolo, ha funzionato ... lasciami provare la tua altra idea. È robusto? mai sentito parlare di token finestra. – likejiujitsu

1

È anche un modo migliore per controllare il suo già aggiunto sulla finestra o no. if (view.getParent()! = Null)) { windowsManager.removeView (visualizzazione); }

Problemi correlati