2012-01-18 7 views
10

Có thể sử dụng FragmentTransaction và phương thức remove() để loại bỏ các đoạn được định nghĩa trong tệp layout.xml (sử dụng thẻ phân đoạn) không?Tôi có thể xóa một đoạn được xác định trong tệp layout.xml không?

Tôi không làm việc này bằng cách sử dụng thư viện hỗ trợ v4. Mảnh vỡ vẫn được giữ nguyên sau khi bạn thực hiện FragmentTransaction, sau khi gọi remove(). Bất cứ ai có thể cho tôi biết nếu điều này là do thiết kế, một lỗi hoặc một tính năng?

Có thể thay thế một đoạn được định nghĩa trong lyaout.xml, vì vậy tôi thấy có một chút lạ là không thể xóa nó?

Trả lời

11

Các API gốc có sẵn bắt đầu từ Honeycomb hoạt động giống như trong thư viện hỗ trợ, vì vậy bạn không thể xóa một thể hiện của Phân đoạn đã được khai báo trong tệp XML bố cục của bạn.

Với FragmentTransactions bạn thao tác các nhóm xem như LinearLayouts hoạt động như vùng chứa để giữ bố cục của các phân đoạn khác. Tuy nhiên, khi bạn khai báo Fragment trong bố cục của mình, nó không có vùng chứa theo cùng một nghĩa vì nó là một phần vĩnh viễn của cấu trúc phân cấp Chế độ xem, do đó bạn không thể xóa nó. Đó là do thiết kế, để hỗ trợ những thứ như các mảnh dẫn hướng mà bạn không bao giờ loại bỏ anyways. :)

Một điều thú vị, và tôi phát hiện ra nó hoàn toàn do tai nạn, là bạn có thể thêm Fragments mới vào một Fragment đã được khai báo với thẻ trong layout của bạn; và nó hoạt động như một vùng chứa cho các Fragments khác

+0

Điểm tốt. Bây giờ tôi thấy sự phân biệt rõ ràng giữa việc loại bỏ một đoạn được khai báo trong một bố cục xml (vấn đề của tôi) và thao tác một nhóm xem có chứa một đoạn (Thay thế). –

+0

"Tuy nhiên, khi bạn khai báo trong bố cục của mình, nó không có ..." bạn đã quên từ "Phân đoạn" – Gonzo

1

Tôi không làm việc này bằng cách sử dụng thư viện hỗ trợ v4. Đoạn vẫn được giữ nguyên sau khi bạn cam kết FragmentTransaction, sau khi gọi xóa(). Bất cứ ai có thể cho tôi biết nếu điều này là do thiết kế, một lỗi hoặc một tính năng?

Đây là do thiết kế (hoặc thiếu tính năng, không chắc chắn là tính năng nếu bạn hỏi tôi: P). Vì vậy, miễn là bạn đang sử dụng các thư viện hỗ trợ, bạn không thể đạt được điều này.

+0

Cảm ơn câu trả lời. Bạn có chắc chắn rằng bạn có thể sử dụng ứng dụng Honeycomb gốc không? –

+1

Tôi xin lỗi, tôi không biết. –

1

Giống như @ david-c-sainte-claire và @ martín-marconcini cho biết, bạn không thể sử dụng phương thức remove() và FragmentTransaction để loại bỏ đoạn đã được định nghĩa trong XML . Điều đó không có nghĩa là bạn không may mắn. Bạn luôn có thể sử dụng phương thức setVisibility().

findViewById(R.id.fragment_main).setVisibility(View.GONE);