2010-10-01 15 views
17

Vì vậy, tôi có thể thổi phồng một ViewStub khi chạy. Hãy nói rằng tôi muốn làm cho nó biến mất và sau đó có thể thổi phồng một lần nữa tùy thuộc vào một số sự kiện xảy ra (ví dụ, một thanh công cụ thổi phồng và giảm phát theo những gì người dùng chọn trên màn hình).Làm cách nào để "làm lệch hướng" một ViewStub?

Tôi có thể sử dụng View.setVisibility (View.GONE) .... có cách nào khác không?

Hoặc tôi đang làm điều gì sai ở đây?

Cảm ơn! :)

+0

'setVisibility (View.GONE)' có một chút mô tả hơn. – st0le

+0

Cảm ơn .... Đã chỉnh sửa – Sid

+0

Bạn không thích gì về View.GONE? –

Trả lời

33

Việc bố trí thổi phồng có thể tốn kém, đặc biệt là trên các thiết bị cũ hơn. Hãy nghĩ về ViewStub như một cơ chế tải chậm hơn để xem các subtrees có thể hoặc không bao giờ được mở rộng hơn là một cách để trao đổi các phần của một hệ thống phân cấp khung nhìn trong thời gian chạy. Sau khi tăng cao, không có gì sai khi trao đổi giữa VISIBLE/GONE. GONE sẽ làm cho khuôn khổ bỏ qua subtree đó trong quá trình đi lại đắt tiền.

Điều này đúng với điều kiện bạn không cần bộ nhớ được sử dụng bởi chế độ xem tăng cao. Việc đặt chế độ hiển thị thành GONE không giải phóng bất kỳ bộ nhớ nào; nó chỉ đánh dấu xem như đã đi cho mục đích bố trí và bản vẽ. Để giải phóng bộ nhớ của chế độ xem được tăng cao của viewstub, bạn thực sự phải loại bỏ chế độ xem được tăng cao và thay thế nó bằng một khung nhìn mới để sử dụng sau này.

+0

hello @adamp Tôi có một nghi ngờ. nếu tôi tạo một bố cục tuyến tính đơn giản và thêm một chế độ xem con động trong đó và khi tôi không cần, tôi xóa chế độ xem con đó khỏi bố cục tuyến tính theo cách này sẽ xóa hoàn toàn chế độ xem con. Có cách tiếp cận tốt khi bạn muốn tối ưu hóa bộ nhớ? bởi vì khi xem sơ khai thổi phồng, chúng tôi không thể xóa chế độ xem đó chỉ bằng cách đặt nó ở chế độ GONE. – KDeogharkar

0

Có, bạn có thể xóa thời gian bạn muốn .i đã thực hiện ngay bây giờ.

ViewStub stub = findById(...); 
View v = stub.inflate(); 

và đặt chế độ xem chế độ xem trên mọi sự kiện.

v.setVisibility(View.GONE); 
+1

Đặt khả năng hiển thị thành GONE không xóa nó, nó chỉ ẩn nó. – Pkmmte

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