Ví dụ trực tuyến không điền vào tất cả các khoảng trống. Tôi sẽ cố gắng trả lời câu hỏi của bạn trực tiếp:
"Trên ví dụ đầu tiên (ví dụ có điện thoại) bạn nên tạo Hoạt động với tệp xml chứa một tệp và hoạt động chỉ gọi setContentView() trên xml đó và đó là tất cả?"
Bạn đã bắt đầu ở đúng nơi. Nhưng có nhiều hơn thế. Luôn có nhiều cách để giải quyết vấn đề trong Android nhưng cách được đề xuất để tạo hiệu ứng có số lượng phân đoạn động dựa trên lịch phát sóng. bất động sản là:
- Tạo file layout XML trong/bố trí cho tiểu học (mặc định) mục tiêu định hướng/thiết bị/form-factor/SDK
- Tạo file XML bố trí cho các cơ sở nhỏ nhất-width cho khác nhắm mục tiêu thiết bị. Bạn cũng có thể muốn nhắm mục tiêu các định hướng khác, SDK, v.v.
- Mỗi tệp XML bố cục sẽ có tập hợp các đoạn được xác định riêng của mình
- Trong Hoạt động, hãy kiểm tra xem có phân đoạn nào.
Rõ ràng một chiến lược tương tự có thể được áp dụng cho các bố cục có lập trình.
Trong ví dụ của bạn trong câu hỏi ban đầu (từ tài liệu của Google), bạn có thể có:
- bố trí/main.xml :: bố trí này sẽ chỉ có Fragment 1
- bố trí sw600dp/main.xml :: bố trí này sẽ phải mảnh vỡ 1, 2
Sau đó, trong MainActivity.java bạn sẽ kiểm tra sự tồn tại của mỗi đoạn . Để làm điều đó, bạn có thể sử dụng FragmentManager # findFragmentById() để có một kiểm tra như: if findFragmentById() trả về null cho Fragment-2 sau đó MainActivity biết thiết bị đã nạp layout/main.xml và chỉ hỗ trợ một đoạn.
Bước 'lùi lại' từ ví dụ này phần nào cho thấy: trước khi sử dụng Phân đoạn bạn có thể đã gọi Hoạt động B từ Hoạt động A với startAcitityForResult (int). Trong mô hình Fragment, bạn có thể chỉ cần có kết quả từ Fragment 2 gây ra một cái gì đó xảy ra trong Fragment 1, vì vậy nó hợp lý để MainActivity là gatekeeper cho điều đó. Khi bạn mở rộng trên ví dụ, bạn có thể thấy rằng trong các ứng dụng khác, MainActivity có thể cần phải gọi các hoạt động khác - vì bất kỳ lý do gì. Có lẽ bạn đang nhắm mục tiêu một máy tính bảng lớn với đủ bất động sản cho 3 mảnh nhưng trên một chiếc điện thoại cần phải có 3 hoạt động. Mọi thứ có thể thú vị nhưng API Fragment khá mạnh mẽ.
"Bạn có thể đặt Phân đoạn làm hoạt động hoặc là Trình bao bọc luôn được yêu cầu khi sử dụng phân đoạn không?"
Phân đoạn không phải là Hoạt động. Thật vậy Fragments được nạp bởi các hoạt động, do đó, có ai có thể nói một wrapper là luôn luôn cần thiết. Bạn đang chạm vào một khía cạnh tinh tế khác của Fragments. Trong khi các hoạt động hoạt động như bộ điều khiển MVC, các mảnh vỡ có thể được gọi là "bộ điều khiển mini" do vòng đời của chúng giống nhau và thực hiện cùng với một hoạt động. Một lần nữa, vòng đời của Fragment được chứa bên trong ("được bao bọc bởi") vòng đời của Activity quản lý Fragment. Tôi khuyên bạn nên làm quen với vòng đời Fragment được ghi lại tại http://developer.android.com/guide/topics/fundamentals/fragments.html#Lifecycle.
dùng giải pháp của bạn một bước tiến hơn tạo chung 'SingleFragmentActivity' có một đoạn như tham số hàm tạo và thêm nó vào' onCreate'. sau đó sử dụng Hoạt động này mỗi khi bạn cần một số hoạt động phân đoạn đơn lẻ. – shem
@shem - Tôi thực hiện chính xác điều tương tự - tôi chuyển tên Phân đoạn mẫu thành Hành động để nó có thể được khởi tạo từ Chuỗi. – Graeme
Vâng, bạn cũng có thể ngừng sử dụng Phân đoạn trừ khi bạn thực sự cần. Trong hầu hết các trường hợp, sử dụng một Activity đơn giản cũng sẽ thực hiện công việc cũng như –