2012-04-12 33 views
19

Tôi có ba đoạn như minh họa trong hình bên dưới. Tôi đã thêm tất cả ba mảnh này trong LinearLayout bằng tệp .xml và khi hoạt động của trình khởi chạy của tôi bắt đầu, tôi tải bố cục .xml đó bằng cách sử dụng setContentView.

Tôi có một số điều khiển trên fragment2. Nhấp vào bất kỳ ai tải đoạn mã theo cách lập trình bằng cách sử dụng phương thức FragmentTransaction và cam kết. Các mảnh vỡ này được thêm vào màn hình nhưng vấn đề là đoạn được thêm vào theo chương trình4 chiếm toàn bộ vùng màn hình. Những gì có thể là vấn đề?

Lưu ý: Trên bất kỳ mục nào nhấp vào f2 tôi chỉ muốn thay thế f2 bằng đoạn mới f4. Hãy nhớ rằng tôi đã thêm tệp f1, f2, f3 thông qua tệp bố cục xml và thêm phân đoạn mới f4 theo lập trình.

enter image description hereThay thế một đoạn chương trình

+0

Không rõ ràng. Bạn đang hiển thị tất cả bốn mảnh với nhau ở cuối.? –

Trả lời

33

Bạn nên luôn thêm, xóa và thay thế các đoạn của bạn theo chương trình. Như vậy tôi đề nghị bạn thay thế các mảnh F-1, F-2 và F-3 bằng các thùng chứa như FrameLayout.

Về cơ bản thay vì có yếu tố <fragment/> là F-1, bạn tạo thành phần tử <FrameLayout/>. Sau đó, bạn thực hiện giao dịch phân đoạn trong FragmentActivity's onCreate:

Fragment1 f1 = new Fragment1(); 
FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.replace(R.id.f1_container, f1); // f1_container is your FrameLayout container 
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
ft.addToBackStack(null); 
ft.commit(); 

Bây giờ, Giả sử bạn đã thực hiện điều này cho F-1, F-2 và F-3. Sau đó, bạn thay thế f2 bằng f4 bằng cách thực hiện lại điều tương tự trong OnClickListener:

public void onClick(View v) { 
    Fragment4 f4 = new Fragment4(); 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.replace(R.id.f2_container, f4); // f2_container is your FrameLayout container 
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
    ft.addToBackStack(null); 
    ft.commit(); 
} 
+0

Bạn có bất kỳ tài liệu tham khảo để tôi có thể lấy một ví dụ từ đó? – MobiDev

+1

Tôi đã chỉnh sửa câu trả lời của mình. Điều này sẽ khắc phục vấn đề của bạn. – CodePrimate

+1

Cảm ơn. OK những gì tôi hiểu là không đặt các mảnh trực tiếp vào bố trí xml. Đặt framelayouts thay cho các phần tử mảnh. Và trong khi thay thế f4 với f2 sử dụng khung của f2. Tôi có đúng không? Bạn có thể cung cấp cho trang web tham khảo để kiểm tra xem nó ra. – MobiDev

2

Chỉ giữ FrameLayout làm trình giữ chỗ cho đoạn trong XML. Trong OnCreate tải các mảnh trong framelayout. OnClick của mảnh, cung cấp cho id của FrameLayout cụ thể để thay thế bởi Fragment4.

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