2014-11-20 22 views
8

Khi tôi cố gắng để làm một WindowManager.removeView(),Có cách nào để kiểm tra xem android WindowManager đã có chế độ xem chưa?

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) 

tôi nhận lỗi nghiêm trọng này vì quan điểm là không có trong quản lý cửa sổ. Không có cách nào để kiểm tra xem người quản lý cửa sổ đã thêm chế độ xem trước đó chưa? Tôi không thấy bất kỳ phương pháp như vậy trong source

Trả lời

23

Bạn có thể kiểm tra xem của xem thẻ cửa sổ là null:

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

Bạn cũng có thể chỉ cần nắm bắt các ngoại lệ:

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

Tôi có thể thử đề xuất của bạn nhưng có vẻ như không đúng. Một ngoại lệ IMHO không nên bỏ qua - khi có lỗi trong chương trình của tôi, bỏ qua ngoại lệ sẽ là xấu. – likejiujitsu

+0

Tôi đồng ý, bạn không nên bỏ qua nó, nhưng đó là giải pháp tiềm năng. Tôi đã thêm một ý tưởng khác. –

+0

thực hiện thử và bắt nó, làm việc ... hãy để tôi thử ý tưởng khác của bạn. Nó có mạnh không? chưa bao giờ nghe thấy mã thông báo cửa sổ. – likejiujitsu

1

Nó cũng là một cách tốt hơn để kiểm tra nó đã được thêm vào cửa sổ hay không. nếu (view.getParent()! = Null)) { windowsManager.removeView (xem); }

Các vấn đề liên quan